我想使用sed
(我认为吗?)替换文件内容中的模式。
Hello <<CODE>>
Goodbye.
Anonymous person,
I am very nice.
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] 删除。
我来说两句