我想找到并替换
的模式text="
hold1
hold2
<file option1='one'>
some text
some text
...
... more data
</file>
this1
that1
"
pattern="<file.*</file>"
replacewith="<sometext>
value1
</sometext>"
output text="
hold1
hold2
<sometext>
value1
</sometext>
this1
that1
"
P.S。 Stackoverflow上的这些问题没有帮助。 sed : printing lines between two words only when one of the line matches a third word or any pattern
答案 0 :(得分:6)
使用sed
您可以尝试以下内容:
sed -e ':a;N;$!ba' -e 's#<file.*</file>#<sometext>\nvalue1\n</sometext>#' file
我的sed
有点生疏,但我们在这里做的是使用:a;N;$!ba
我们在模式空间中有效地创建了一条长行,以便我们可以应用第二个表达式替换它。
这可能需要GNU sed
$ cat file
hold1
hold2
<file option1='one'>
some text
some text
more data
</file>
this1
that1
$ sed -e ':a;N;$!ba' -e 's#<file.*</file>#<sometext>\nvalue1\n</sometext>#' file
hold1
hold2
<sometext>
value1
</sometext>
this1
that1