gpt4 book ai didi

sed - 使用sed替换多行

转载 作者:行者123 更新时间:2023-12-04 22:23:12 34 4
gpt4 key购买 nike

我以为我了解sed,但我猜不是。我有以下两个文件,其中我要用一个不同的行替换“why”和“huh”行。完全没有空格。

test.txt:


hi
why
huh
hi
why
huh

test2.txt:


1
hi
why
huh
hi
why
huh

以下两个命令给出以下结果:
sed "N; s/<why\/>\n<huh\/>/yo/g" test.txt > out.txt

out.txt:
hi
why
huh
hi
yo

sed "N; s/<why\/>\n<huh\/>/yo/g" test2.txt > out2.txt

out2.txt:
1
hi
yo
hi
why
huh

我对sed不了解什么?为什么两个输出文件都不包含以下内容:
hi
yo
hi
yo

最佳答案

您的表达几乎是正确的,但是有两个问题:

  • 如果您想将why匹配为一个单词,则应在其周围放置\<\>。您确实只在其周围放置了<\/>。因此,第一个更正是:
    $ sed 'N; s/\<why\>\n\<huh\>/yo/g' test.txt
  • 但它也不起作用:
    $ sed 'N; s/\<why\>\n\<huh\>/yo/g' test.txt
    hi
    why
    huh
    hi
    yo

    为什么只替换第二对线?好吧,在第一行中,N命令将why连接到hi,并在pattern space中保留字符串hi\nwhy。该字符串与s///命令不匹配,因此仅打印该行。下次,您将在模式空间中包含字符串huh并将其连接到hi。仅在下一行中,您将在模式空间中拥有why\nhuh来替换。

    解决方案是仅在当前行是why时使用address /^why$/来连接下一行:
    $ sed '/^why$/ {N; s/\<why\>\n\<huh\>/yo/g}' test.txt
    hi
    yo
    hi
    yo
  • 关于sed - 使用sed替换多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11234001/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com