我有一个巨大的长文件,文本分隔为
subtlechanges|NEW=19647490,subtlec|NEW=19638255
我想要像
这样的文字subtlechanges,subtle.
我尝试使用\ |。* $但是它会删除第一个管道后的所有内容。任何猜测。提前致谢
答案 0 :(得分:1)
如果我理解正确,我们的文件可能如下:
$ cat file
subtlechanges|NEW=19647490,subtle|NEW=19638255
并且,我们想要删除从管道字符到下一个逗号的所有内容。在那种情况下:
$ sed 's/|[^,]*//g' file
subtlechanges,subtle
在sed中,替换命令看起来像s/old/new/g
,其中old
是删除内容的正则表达式,new
是替换内容,最终g
表示我们想做的不是每行一次,而是每行多次。
我们在old
使用的正则表达式是|[^,]*
。这匹配管道|
以及最多但不包括第一个逗号之后的任何字符。
答案 1 :(得分:1)
另一种方法,使用逗号或管道作为字段分隔符,打印第1个,第3个......每个奇数字段。
awk -F '[,|]' '{
sep=""
for (i=1; i<NF; i+=2) {
printf "%s%s", sep, $i
sep=","
}
print ""
}' file