gpt4 book ai didi

regex - Sed 用文件内容替换模式

转载 作者:行者123 更新时间:2023-11-29 09:26:02 26 4
gpt4 key购买 nike

我想使用 sed(我想?)用文件内容替换模式。

例子

文件 1(主文件)

Hello <<CODE>>
Goodbye.

文件2(内容)

Anonymous person,
I am very nice.

文件 3(目标)

Hello Anonymous person,
I am very nice.
Goodbye.

现在,我正在使用这个命令:

sed "/<<CODE>>/{r file2
:a;n;ba}" file1 | \
sed "s/<<CODE>>//g" > \
file3

但是这个输出:

Hello
Anonymous person,
I am very nice.
Goodbye.

(注意 Hello 之后的换行符)

  • 如果不获取换行符,我如何做到这一点?
    • (请注意 file2 可能包含各种内容:括号、换行符、引号……)

最佳答案

使用 awk 更简单:

awk 'FNR==NR{s=(!s)?$0:s RS $0;next} /<<CODE>>/{sub(/<<CODE>>/, s)} 1' file2 file1
Hello Anonymous person,
I am very nice.
Goodbye.

解释:

  • FNR==NR - 为输入中的第一个文件执行此 block ,即 file2
  • s=(!s)?$0:s RS $0 - 在字符串中连接整个文件内容 s
  • next - 阅读下一行直到 EOF在第一个文件上
  • /<<CODE>>/ - 如果一行带有 <<CODE>>被发现执行那个 block
  • sub(/<<CODE>>/, s) - 替换 <<CODE>>带字符串 s (file2 的数据)
  • 1 - 打印输出

编辑: 非正则表达式方式:

awk 'FNR==NR{s=(!s)?$0:s RS $0; next}
i=index($0, "<<CODE>>"){$0=substr($0, 1, i-1) s substr($0, i+8)} 1' file2 file1

关于regex - Sed 用文件内容替换模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27361981/

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