删除管道和逗号之间的文本

时间:2015-12-02 01:39:48

标签: linux bash sed

我有一个巨大的长文件,文本分隔为

subtlechanges|NEW=19647490,subtlec|NEW=19638255 

我想要像

这样的文字
subtlechanges,subtle. 

我尝试使用\ |。* $但是它会删除第一个管道后的所有内容。任何猜测。提前致谢

2 个答案:

答案 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