因此,假设我有一个包含以下文本的文件:
string1
string1
string2
string1
string2
string1
string1
我想在最后一次出现“string2”之后删除所有文本。例如,输出将如下所示:
string1
string1
string2
string1
string2
在bash中执行此操作的简单方法是什么?
答案 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
只需将该数字设置为大于文件中的行数。