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