Linux BASH 文本处理求助

2018-11-17 17:38:35 +08:00
 maxduke
有以下源文件 a.txt:

# This is a file
// Comments
somechars
somechars,somechar
somechars,somechars,somechars

需求:
在有且只有一个逗号的情况下,在行末插入指定字符串。 在有 2 个逗号的情况下,在第二个逗号前插入指定字符串。

输出效果 output.txt:

# This is a file
// Comments
somechars
somechars,somechar,STRTOBEINSERT
somechars,somechars,STRTOBEINSERT,somechars


求教如何实现这个效果,使用 sed/awk 都可以,多谢🙏
1476 次点击
所在节点    问与答
6 条回复
ifaii
2018-11-17 19:07:02 +08:00
x='|STRTOBEINSERT|'
perl -pe "s/(.*?)(,)(.*?)(,)(.*$)/\1\2\3$x\4\5/g || s/(.*?)(,)(.*$)/\1$x\2\3/g" filename

我又复习了一次 perl 的用法
ifaii
2018-11-17 19:09:32 +08:00
看错题目了,稍微改一下参数位置即可

x='|STRTOBEINSERT|'

perl -pe "s/(.*?)(,)(.*?)(,)(.*$)/\1\2\3$x\4\5/g || s/(.*?)(,)(.*$)/\1\2\3$x/g" filename
l76862157
2018-11-17 19:29:31 +08:00
awk -F',' '{if(NF==2){print $0", STRTOBEINSERT"} else if(NF==3){print $1","$2", STRTOBEINSERT,"$3}else{print}}'
DiamondbacK
2018-11-17 19:31:02 +08:00
sed 's/[^,]*,[^,]*/&,STRTOBEINSERT/'
gawk 'NF>1 {$2=$2 ",STRTOBEINSERT"} {print}' FS=, OFS=,
uuspider
2018-11-17 19:31:26 +08:00
sed 's/\([^,]*,[^,]*\)\(.*\)/\1,STRTOBEINSERT\2/'
maxduke
2018-11-17 19:56:58 +08:00
以上各位回复都感谢啦,🙏

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/508809

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX