sed用文件内容替换模式

艾蒂安·布鲁因斯(Etienne Bruines)

我想使用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 -对输入中的第一个文件执行该块,即 file2
  • s=(!s)?$0:s RS $0 -将整个文件内容串联在一起 s
  • next-读取下一行,直到EOF第一个文件
  • /<<CODE>>/-如果<<CODE>>找到一条线,则执行该块
  • 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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

sed:用文件内容替换范围

来自分类Dev

用sed替换文件中的特定模式或替换

来自分类Dev

用sed替换文件中的特定模式或替换

来自分类Dev

用脚本中的sed将行替换为文件的内容

来自分类Dev

用awk或sed替换模式

来自分类Dev

无法用sed替换URL模式

来自分类Dev

用sed替换模式中的字符

来自分类Dev

sed:用 bash 函数输出替换模式

来自分类Dev

用 sed 替换包含模式的行

来自分类Dev

用sed中的文件内容替换文件名占位符

来自分类Dev

用sed替换<form>标记之间的内容

来自分类Dev

用sed / awk替换特定列的内容

来自分类Dev

用另一个文件的内容替换文件中的模式

来自分类Dev

sed替换文件直到模式匹配

来自分类Dev

sed拒绝替换模式->文件(编码)错误?

来自分类Dev

Sed:如何用文件的contemt替换模式

来自分类Dev

sed:搜索文件并替换行中的模式

来自分类Dev

sed替换文件,直到模式匹配

来自分类Dev

如何使用sed用包含符号的文件内容替换字符串

来自分类Dev

如何用sed替换文件内容

来自分类Dev

sed替换为非常长的文件内容

来自分类Dev

用sed替换文件中所有行的模式中第一次出现的模式

来自分类Dev

用sed替换文件中所有行的模式中第一次出现的模式

来自分类Dev

用文件内容替换两个模式(包括两个模式)之间的所有行

来自分类Dev

用awk或sed替换xml文件的部分

来自分类Dev

用SED替换文件中的文本

来自分类Dev

sed在模式和文件末尾之间替换模式

来自分类Dev

循环使用sed。用一个文件中的文本替换另一个文件中的匹配模式

来自分类Dev

sed:如何以多行模式替换所有内容?