删除Unix中最后一个字符串实例后的所有文本

时间:2017-05-28 18:08:33

标签: bash unix

因此,假设我有一个包含以下文本的文件:

string1
string1
string2
string1
string2
string1
string1

我想在最后一次出现“string2”之后删除所有文本。例如,输出将如下所示:

string1
string1
string2
string1
string2

在bash中执行此操作的简单方法是什么?

3 个答案:

答案 0 :(得分:2)

grep 方法:

grep -zo '.*string2' yourfile && echo

输出:

string1
string1
string2
string1
string2

-z - 将输入和输出数据视为行序列,每个行以零字节(ASCII NUL字符)而不是换行符结束

要将结果写入文件,请执行以下操作:

(grep -zo '.*string2' yourfile && echo "")  > output.txt

答案 1 :(得分:1)

tac file | awk '!f && /string2/ { f=1 }; f' | tac

tac打印文件。 awk在模式string2的第一次出现时设置了一个标志(这是原始版本中的最后一次出现),并且仅在设置了标志时才打印一行。

答案 2 :(得分:0)

嗯,这是一个简单的grep

grep -B100000000 string2 yourfile

只需将该数字设置为大于文件中的行数。