awk / sed:在第二场比赛后删除剩余线

时间:2012-08-29 08:09:42

标签: sed awk

我需要一些帮助,在某些文件中删除(并包括)第1行(仅第1行)的第二个匹配后的其余部分。例如,如果模式为星号*

输入:

asd*asd*asd*asd*asd*
asdasdasd*asdasdasd*asdasdasd*asdasdasd

预期产出:

asd*asd
asdasdasd*asdasdasd*asdasdasd*asdasdasd

谢谢!

3 个答案:

答案 0 :(得分:2)

要将操作限制为一行,请使用“地址”:

sed '1s/\([^*]\*[^*]*\).*/\1/'

答案 1 :(得分:2)

一个awk解决方案:

awk '
    BEGIN { FS = OFS = "*" } 
    FNR == 1 { 
        print $1, $2 
    } 
    FNR > 1 { 
        print 
    }
' infile

产量:

asd*asd
asdasdasd*asdasdasd*asdasdasd*asdasdasd

答案 2 :(得分:2)

这可能适合你(GNU sed):

sed '1s/\*[^*]*//2g' file