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

Bash 删除Unix中最后一个字符串实例之后的所有文本,bash,unix,Bash,Unix,假设我有一个包含以下文本的文件: string1 string1 string2 string1 string2 string1 string1 我想去掉最后一次出现“string2”之后的所有文本。例如,输出如下所示: string1 string1 string2 string1 string2 在bash中实现这一点的简单方法是什么 tac file | awk '!f && /string2/ { f=1 }; f' | tac tac将文件倒置打印awk在模式st

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

string1
string1
string2
string1
string2
string1
string1
我想去掉最后一次出现“string2”之后的所有文本。例如,输出如下所示:

string1
string1
string2
string1
string2
在bash中实现这一点的简单方法是什么

tac file | awk '!f && /string2/ { f=1 }; f' | tac
tac
将文件倒置打印
awk
在模式
string2
的第一次出现时设置标志(这是原始版本中的最后一次出现),并且仅当设置了标志时才打印一行

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

grep方法:

grep -zo '.*string2' yourfile && echo
输出:

string1
string1
string2
string1
string2

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


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

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

grep -zo '.*string2' yourfile && echo
输出:

string1
string1
string2
string1
string2

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


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

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

好吧,这里有一个简单的
grep

grep -B100000000 string2 yourfile

只需使该数字大于文件中的行数。

好吧,这里有一个简单的
grep

grep -B100000000 string2 yourfile

只需使该数字大于文件中的行数。

为什么对我不起作用?我在
string2
@steffen上只得到了两行代码,你的操作系统是什么,grep版本是什么?
grep(GNU-grep)2.20
,操作系统是
CentOS 6.9版(最终版)
是的,我知道,你的答案对我来说非常有意义(它只会将所有文件内容加载到RAM中,但大多数情况下都可以)。我不知道为什么它不能在我的测试机上工作。它就像
-z
一样没有效果,但实际上它在运行wihtout
-o
时有效果-然后我得到整个文件内容,而不仅仅是两行。为什么它对我不起作用?我在
string2
@steffen上只得到了两行代码,你的操作系统是什么,grep版本是什么?
grep(GNU-grep)2.20
,操作系统是
CentOS 6.9版(最终版)
是的,我知道,你的答案对我来说非常有意义(它只会将所有文件内容加载到RAM中,但大多数情况下都可以)。我不知道为什么它不能在我的测试机上工作。它像
-z
一样没有效果,但实际上它在运行wihtout
-o
时有效果-然后我得到了整个文件内容,而不仅仅是两行。谢谢,你让我开心了!谢谢,你让我开心!