簡體   English   中英

sed不能替代所有匹配項

[英]sed does not replace all the matches

我在文件上有這個:

Structural Attributes:    text
                          text_id              [A]
                          text_lleng_tr        [A]
                          text_lleng_or        [A]
                          text_cpr             [A]
                          text_for             [A]
                          text_ftr             [A]
                          text_indexador       [A]
                          text_dif             [A]
                          text_reg             [A]
                          text_esp             [A]
                          text_tem             [A]
                          text_tipus           [A]
                          text_data_or         [A]
                          text_data_tr         [A]
                          text_autor           [A]
                          text_traductor       [A]
                          text_titol_or        [A]
                          text_titol_tr        [A]
                          s
                          s_id                 [A]
                          enty
                          contrac
                          contrac_forma        [A]
                          abr
                          date
                          p

然后我在上面運行此sed命令:

sed -i "N;s/\[A\]\n/,/g" file

從中我得到:

Structural Attributes:    text
                          text_id              ,                          text_lleng_tr        [A]
                          text_lleng_or        ,                          text_cpr             [A]
                          text_for             ,                          text_ftr             [A]
                          text_indexador       ,                          text_dif             [A]
                          text_reg             ,                          text_esp             [A]
                          text_tem             ,                          text_tipus           [A]
                          text_data_or         ,                          text_data_tr         [A]
                          text_autor           ,                          text_traductor       [A]
                          text_titol_or        ,                          text_titol_tr        [A]
                          s
                          s_id                 [A]
                          enty
                          contrac
                          contrac_forma        ,                          abr
                          date
                          p

因此,您可以看到仍然有[A] +行跳轉,如果我在同一文件上第二次運行sed命令,則[A] +行跳轉的數量會減少,但是我必須運行命令3次使[A] +線跳轉消失。 所以問題是,我是在做錯什么,還是立即替換[A] +跳線的正確方法是什么?

sed並不是完成該任務的好工具,因為它是基於行的文本編輯工具。

您必須使用N來占用額外的一行,以便您的工作緩沖區中將包含分隔兩行的換行符; 問題在於,這僅使您每次都能處理一半換行符,因為一旦行被N占用,它就不會被sed的下一遍占用:您的第一遍將替換line1\\nline2之間的換行符,然后第二遍在line3\\nline4之間line3\\nline4

sed一種可能解決方案是在進行替換之前先將整個文件消耗在內存中,如以下答案所示:

sed -i ':a;N;$!ba;s/\[A\]\n/, /g' file

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM