String 如何获取行号后的所有行

String 如何获取行号后的所有行,string,bash,match,String,Bash,Match,我有这样一个文件: string log 1 string log 2 string match string log 4 string match string log 5 string log 6 我需要在最后一次字符串匹配后获得所有行。如何在bash中实现这一点?我将假设在bash中允许一些外部二进制调用。考虑到这一点: 最后一场比赛后的所有线路 输出 最后一场比赛前的所有线路 输出 首先,查找最后一个匹配的字符串: line=$(grep -n 'string match' myFi

我有这样一个文件:

string log 1 
string log 2
string match
string log 4
string match
string log 5
string log 6
我需要在最后一次字符串匹配后获得所有行。如何在bash中实现这一点?

我将假设在bash中允许一些外部二进制调用。考虑到这一点:

最后一场比赛后的所有线路 输出 最后一场比赛前的所有线路 输出
首先,查找最后一个匹配的字符串:

line=$(grep -n 'string match' myFile | cut -d: -f1 | tail -1)
sed -n "1,${line}p" myFile
然后,打印最后一个字符串匹配的所有行:

line=$(grep -n 'string match' myFile | cut -d: -f1 | tail -1)
sed -n "1,${line}p" myFile
如果您需要上次匹配后的所有行:

sed -n "$((line+1))"',$p' myFile

这可能适合您:

sed 'H;/string match/,+1h;$!d;x' file
awk
解决方案:
我个人会使用这种sed方法:

-bash-4.1$ cat file | sed -n 'H; /string match/h; ${g;p;}'
string match
string log 5
string log 6
-bash-4.1$ cat file | sed -n 'H; /string match/h; ${g;p;}' | grep -v 'string match'
string log 5
string log 6

对不起,我需要最后一次之后的所有线路match@Rikrnp,现在您有了双向=)
sed 'H;/string match/,+1h;$!d;x' file
$ awk 'FNR==NR{if(/match/)x=NR; next}; FNR>x' input.txt{,}
string log 5
string log 6
-bash-4.1$ cat file | sed -n 'H; /string match/h; ${g;p;}'
string match
string log 5
string log 6
-bash-4.1$ cat file | sed -n 'H; /string match/h; ${g;p;}' | grep -v 'string match'
string log 5
string log 6