我正在尝试替换文件内两个已知标签之间的多行文本块。它具有以下结构:
#STARTTAG
some text with numbers 123
and dots . that I want
to replace .
#ENDTAG
我一直在根据我在网上看到的内容尝试不同的方法,包括 sed、awk、perl,但我似乎无法使其工作。
例如,这就是我一直在尝试实现的:
sed -i '' 's/STARTTAG.*ENDTAG/alternative text/g' somefile
但它没有任何作用。我尝试向每个字符串(即标签和替换文本)添加 ' 和 ",但它什么也没做。我不确定我做错了什么。请注意,我希望文本和替代文本都被替换是多行的。
谢谢你
我会做什么:
sed '/STARTTAG/,/ENDTAG/{s/.*/alternative text/g;q}' file
产量:
alternative text
sed
是一个面向线流的工具,所以它的目的不是为了更复杂的情况轻松处理多线。
如果您需要保留标签,最好使用
awk
,以免出现复杂且不可读且不可维护的sed
命令:
awk '$1=="#STARTTAG"{p=1;print;next} $1=="#ENDTAG"{print "alternative text\n"$0}' file
#STARTTAG
alternative text
#ENDTAG
如果您需要即时更改文件,请使用
sponge
(debian)中的more-utils
:
awk '...' file | sponge file