我目前正在编辑多个CSV,以添加2列ORIGIN_FILE和WRITE_DATE。问题是,由于某种原因,字符串总是在新行之后添加。
下面是我输入的csv的一个例子:
PRODUCT, QUANTITY, PRICE
ITEM1, 4.8, 380.33
ITEM2, 2.3, 120.50
ITEM3, 1.5, 210.11但是每次我在下面运行bash命令时:
find $target_dir -type f -name "*.csv" | parallel sed -i '\'1s/$/,ORIGIN_FILE,WRITE_DATE/; 2,$s/$/,myfilename.csv,2022-11-24/\'' {}'这是我得到的输出:
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它总是在第二行之后创建一个新行,并在那里添加我的字符串。
我希望得到这个输出:
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命令,我会很感激的。
发布于 2022-11-25 11:56:49
我能够使用以下命令解决这个问题:
sed '1s/$/,ORIGIN_FILE,WRITE_DATE/; 2,$s/\(\s\)\?$/,myfile.csv,2022-11-24/gmi' myfile.csv我不得不在匹配的regex中添加\(\s\)\?$,因为它看起来像我的输入文件有一个不可见的空格,它不是\n字符,但它将我的数据向下推到下一行。我知道它不是\n的原因是因为我不能在使用\n$的正则表达式中匹配它。
我仍然对这里发生的事情感到困惑。但我真的很高兴我能用你的帮助和建议来解决这个问题。
非常感谢!
发布于 2022-11-25 09:48:08
尝试使用-exec执行find
find . -type f -name "*.cvs" -exec sed -i '1s/$/, ORIGIN_FILE, WRITE_DATE/; 2,$s/$/, myfilename.csv, 2022-11-24/' {} \;https://stackoverflow.com/questions/74566282
复制相似问题