使用awk或sed从最后查找第一个匹配项

时间:2018-01-18 16:08:51

标签: awk sed

是否可以使用awksed从文件末尾找到第一个字符串?或者我需要使用Python或Perl等脚本语言?

3 个答案:

答案 0 :(得分:2)

您可以使用tac(与cat相反)恢复文件中的行顺序,然后使用grep

tac file | grep -m 1 STRING

grep -m1仅为您提供第一次出现。

或者您可以将grep传递给tail

grep STRING | tail -n1

如果您想使用awk

awk 'BEGIN{res=""}/STRING/{res=$0}END{if(res!=""){print res}}' file

说明:

# Initialize result with an empty string
BEGIN{res=""}
# If STRING is found, store the current line in res.
# This will overwrite a previous result, giving you
# always only the last occurrence.
/STRING/{res=$0}
# Once the end of input has been reached print the result
# if STRING was found.
END{if(res!=""){print res}}

答案 1 :(得分:2)

使用sed

sed -n '/string/h;${x;p}' infile

使用awk

tac infile | awk '/abc/{print;exit}' 

测试结果:

akshay@db-3325:/tmp$ cat infile
abc 1
xyz 2
pwd 3
cwd 4
aks 5
axy 6
abc 7
xyz 8
nwd 9

akshay@db-3325:/tmp$ sed -n '/abc/h;${x;p}' infile
abc 7

akshay@db-3325:/tmp$ tac infile | awk '/abc/{print;exit}' 
abc 7

答案 2 :(得分:1)

关注tacawk组合将帮助您快速阅读任何字符串的第一次出现。

tac Input_file | awk '/STRING/{print;exit}'

说明: tac将反转Input_file,然后awk将检查字符串,一旦获得它将打印该行并退出它,因为它只是在第一次出现时很烦,所以不需要在这里读取整个Input_file。