我对sed和regex有点陌生。
我试图编辑一个文本文件,在这里我想用另一个文本文件的全部内容替换第一个文件中两个关键字之间的内容
它应该像这样-
keyword1 inbetweenstuff keyword2
对此
keyword1 textfromfile2 keyword2
我正在尝试此命令,但没有运气
sed -i 's/(keyword1).*(keyword2)/\1 contentsoffile2 \2/g' file1.txt
您正在尝试使用错误的工具。sed用于在单行(s/old/new/
)上进行简单替换,仅此而已。对于其他更有趣的事情,您应该使用awk。
对于多字符RS,使用GNU awk,gensub(),对于match()使用第三个arg:
$ cat file1
keyword1 IN BETWEEN
STUFF ON
ONE OR MORE
LINES keyword2
$ cat file2
NOW IS
THE WINTER OF
OUR DISCONTENT
$ cat tst.awk
BEGIN { RS="^$"; ORS="" }
NR==FNR { new = gensub(/\n$/,"",""); next }
match($0,/(.*keyword1 ).*( keyword2.*)/,a) { print a[1] new a[2] }
$ awk -f tst.awk file2 file1
keyword1 NOW IS
THE WINTER OF
OUR DISCONTENT keyword2
请注意,以上内容将的内容file2
视为文字字符串,因此“ file2”的内容可以是任何内容。尝试任何sed的解决方案,如果“文件2”包含&
,例如(或\1
或/
或......)。它也不关心file2中有多少行,或者file1中的关键字之间有多少行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句