重击删除标记之前文件中的行并将输出保存到文件

时间:2018-10-25 10:58:18

标签: bash

我有一个包含以下内容的源文件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::

2 个答案:

答案 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}'