我需要检查文件是否包含特定的两个字符串,如果包含,则删除它们之间的所有文本(包括字符串)。假设我有一个text看起来像这样的文件:
line of text
line of text
line of text
line of text
#1st string
line of text
line of text
line of text
#2nd string
Run Code Online (Sandbox Code Playgroud)
现在我想删除#1st string和#2nd string和这两个字符串之间的所有行。
我尝试将整个文本放入一个变量中,然后像这样删除它们:
line of text
line of text
line of text
line of text
#1st string
line of text
line of text
line of text
#2nd string
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用,因为文本文件包含一些命令,它们以某种方式列出当前目录的内容并将输出混合到变量中,从而使文件损坏。我可以以某种方式防止这种情况发生,还是有更好的方法来完全实现这一目标?
您可以使用 sed 删除行范围:
sed '/#1st string/,/#2nd string/d' text
Run Code Online (Sandbox Code Playgroud)
要将结果存储到位,请使用
sed -i '/#1st string/,/#2nd string/d' text
Run Code Online (Sandbox Code Playgroud)
或者更便携
sed '/#1st string/,/#2nd string/d' text > tempfile && mv tempfile text
Run Code Online (Sandbox Code Playgroud)
最后,因为您可能只有第一个字符串存在的文件,所以您必须首先检查第二个字符串是否存在:
grep -q '#2nd string' text && sed '/#1st string/,/#2nd string/d' text
Run Code Online (Sandbox Code Playgroud)