簡體   English   中英

如何獲取行號后的所有行

[英]How to get all lines after a line number

我有一個這樣的文件:

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

我需要在最后一個字符串匹配后得到所有行。 我怎么能用bash做呢?

我將在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

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

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

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

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

如果您在上次比賽后需要所有線路:

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

awk解決方案:

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

這可能對你有用:

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

我個人會使用這個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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM