[英]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.