首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sed在每一行的末尾添加字符串。

sed在每一行的末尾添加字符串。
EN

Stack Overflow用户
提问于 2022-11-24 21:19:03
回答 2查看 53关注 0票数 0

我目前正在编辑多个CSV,以添加2列ORIGIN_FILE和WRITE_DATE。问题是,由于某种原因,字符串总是在新行之后添加。

下面是我输入的csv的一个例子:

代码语言:javascript
复制
PRODUCT, QUANTITY, PRICE
ITEM1, 4.8, 380.33
ITEM2, 2.3, 120.50
ITEM3, 1.5, 210.11

但是每次我在下面运行bash命令时:

代码语言:javascript
复制
find $target_dir -type f -name "*.csv" | parallel sed -i '\'1s/$/,ORIGIN_FILE,WRITE_DATE/; 2,$s/$/,myfilename.csv,2022-11-24/\'' {}'

这是我得到的输出:

代码语言:javascript
复制
PRODUCT, QUANTITY, PRICE, ORIGIN_FILE, WRITE_DATE
ITEM1, 4.8, 380.33
myfilename.csv, 2022-11-24
ITEM2, 2.3, 120.50
myfilename.csv, 2022-11-24
ITEM3, 1.5, 210.11
myfilename.csv, 2022-11-24

它总是在第二行之后创建一个新行,并在那里添加我的字符串。

我希望得到这个输出:

代码语言:javascript
复制
PRODUCT, QUANTITY, PRICE, ORIGIN_FILE, WRITE_DATE
ITEM1, 4.8, 380.33, myfilename.csv, 2022-11-24
ITEM2, 2.3, 120.50, myfilename.csv, 2022-11-24
ITEM3, 1.5, 210.11, myfilename.csv, 2022-11-24

希望有人能帮我找出我做错了什么。

如果有人能帮我处理sed命令,我会很感激的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-11-25 11:56:49

我能够使用以下命令解决这个问题:

代码语言:javascript
复制
sed  '1s/$/,ORIGIN_FILE,WRITE_DATE/; 2,$s/\(\s\)\?$/,myfile.csv,2022-11-24/gmi' myfile.csv

我不得不在匹配的regex中添加\(\s\)\?$,因为它看起来像我的输入文件有一个不可见的空格,它不是\n字符,但它将我的数据向下推到下一行。我知道它不是\n的原因是因为我不能在使用\n$的正则表达式中匹配它。

我仍然对这里发生的事情感到困惑。但我真的很高兴我能用你的帮助和建议来解决这个问题。

非常感谢!

票数 0
EN

Stack Overflow用户

发布于 2022-11-25 09:48:08

尝试使用-exec执行find

代码语言:javascript
复制
find . -type f -name "*.cvs" -exec sed -i '1s/$/, ORIGIN_FILE, WRITE_DATE/; 2,$s/$/, myfilename.csv, 2022-11-24/' {} \;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74566282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档