如何获取行号后的所有行

时间:2012-02-14 09:29:31

标签: string bash match

我有一个这样的文件:

string log 1 
string log 2
string match
string log 4
string match
string log 5
string log 6

我需要在最后一个字符串匹配后获取所有行。我怎么能用bash来做呢?

5 个答案:

答案 0 :(得分:5)

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

最后一场比赛后的所有队列

tac infile | sed '/string match/,$d' | tac

输出

$ tac infile | sed '/string match/,$d' | tac
string log 5
string log 6

最后一场比赛前的所有队列

tac infile | sed '1,/string match/d' | tac

输出

$ tac infile | sed '1,/string match/d' | tac
string log 1
string log 2
string match
string log 4

答案 1 :(得分:5)

首先,找到最后一个字符串匹配:

line=$(grep -n 'string match' myFile | cut -d: -f1 | tail -1)

然后,将所有行打印到最后一个字符串匹配:

sed -n "1,${line}p" myFile

如果您在上次比赛后需要所有线路:

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

答案 2 :(得分:2)

awk解决方案:

$ awk 'FNR==NR{if(/match/)x=NR; next}; FNR>x' input.txt{,}
string log 5
string log 6

答案 3 :(得分:1)

这可能对您有用:

sed 'H;/string match/,+1h;$!d;x' file

答案 4 :(得分:0)

我个人会使用这种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