[英]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.