我有一个包含以下内容的源文件source.txt
:
data1
data2
data3
::remove txt before this line::
data4
data5
这是我想要的输出,并将其保存到output.txt
文件
data4
data5
任何命令都可以使用,只要它可以在bash中运行,并且可以保存为脚本文件并以sh remove.sh
的身份运行
我尝试过:
cat source.txt | awk -F'::remove txt before this line::' '{print $1}' | tee > output.txt
但是它只是删除了::remove txt before this line::
行
答案 0 :(得分:0)
您可以使用sed
来做到这一点:
sed '1,/^::remove txt before this line::$/d' source.txt
sed
逐行读取source.txt
文件的内容,并将第一个参数中提供的脚本应用于每一行。
上面的程序非常简单;它仅包含一个命令:d
(删除)。该命令适用于与命令前面提供的地址匹配的行。
上面的d
命令提供了两个地址:1
和/^::remove txt before this line::$/
。
1
表示文件的第一行。
/^::remove txt before this line::$/
是一个正则表达式,它与完全包含字符串::remove txt before this line::
的行匹配(^
匹配行的开头,$
匹配行的结尾)。
上面的sed
命令从输入文件中读取所有行,并从文件的第一行开始删除(不显示),直到(包括)仅包含文本{的第一行{1}}。其他所有文件都显示在其输出上(不会更改输入文件)。
如果输入文件中没有匹配的行,则该命令不显示任何内容。
答案 1 :(得分:0)
使用awk
,您应该设置variable RS
to empyt string to work with multilines:
awk 'BEGIN {RS=""; FS="::remove txt before this line::\n"} {print $2}'