2012-08-29 72 views
1

我需要一些幫助,在某些文件中刪除行(包括)行1(僅行1)的第二個匹配之後的其餘行。例如,如果模式將是一個星號*awk/sed:在第二次匹配後刪除行的剩餘部分

輸入:

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

預期輸出:

asd*asd 
asdasdasd*asdasdasd*asdasdasd*asdasdasd 

謝謝!

回答

2

一個awk解決方案:

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

國債收益率:

asd*asd 
asdasdasd*asdasdasd*asdasdasd*asdasdasd 
2

要限制操作線,使用 「地址」:

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

謝謝!它的效果很好。我只是害怕我的例子並不能很好地代表我的數據。如果我想要該模式成爲選項卡,該怎麼辦? 不知何故,當我用\ t替換方括號內的星號不工作時... sed'1s/\([^ \ t] \ * [^ \ t] * \)。*/\ 1 /' – afrendeiro

+1

'sed'無法表示選項卡。您可以使用bash的引用來幫助它:'sed $'1s/\([^ \ t] \ t [^ \ t] * \)。*/\\ 1 /'' – choroba

2

這可能適用於你(GNU sed):

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

注意:使用'2g'生成未指定行爲,所以不要依賴於其他sed實現。 –

+0

N.B. @WilliamPursell我確實指定了GNU sed。 – potong

相關問題