Regex sed不会替换所有匹配项
我有一个档案:Regex sed不会替换所有匹配项,regex,bash,sed,Regex,Bash,Sed,我有一个档案: Structural Attributes: text text_id [A] text_lleng_tr [A] text_lleng_or [A] text_cpr [A]
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
之间的换行符
使用sed
的一个可能的解决方案是,在进行替换之前先使用内存中的整个文件,如所示:
N代表多行,因为我实际上想删除[A]后面的
\N
。我已经尝试了没有g的命令,但是它没有帮助。你能发布最终想要的输出吗?如果允许你使用awk,我可以建议一个工作的awk解决方案。您可以发布awk--v
是的,这会很有帮助,thanks@Andr而且仍然发布awk--v
输出也是可取的,谢谢你这么做了!但这并不是一个很好的解决方案(尤其是当您的文件可能变得更大时)。您可能需要等待另一个更有效的解决方案接受:)
sed -i ':a;N;$!ba;s/\[A\]\n/, /g' file