use*_*858 13 bash shell awk grep sed
我有一个包含内容的文件,
x
a
x
b
x
c
Run Code Online (Sandbox Code Playgroud)
我想grep最后一次出现,
x
c
Run Code Online (Sandbox Code Playgroud)
当我尝试
sed -n "/x/,/b/p" file
Run Code Online (Sandbox Code Playgroud)
它列出了所有的行.从x到c开始
ste*_*fen 34
我不确定我的问题是否正确,所以这里有一些黑暗的镜头:
打印最后一次出现x:
grep x file | tail -1
Run Code Online (Sandbox Code Playgroud)从第一个匹配的行到结束打印文件:
tac file | grep -m1 x
Run Code Online (Sandbox Code Playgroud)从最后一个匹配行打印文件到结尾(如果不匹配则打印所有行):
awk '/x/{flag = 1}; flag' file
Run Code Online (Sandbox Code Playgroud)grep -A 1 x file | tail -n 2
Run Code Online (Sandbox Code Playgroud)
-A 1告诉 grep 在匹配行之后打印一行,
并tail获得最后两行。
或以相反的方式:
tac fail | grep -B 1 x -m1 | tac
Run Code Online (Sandbox Code Playgroud)
注意:您应该确保您的模式足够“强大”,以便为您提供正确的线条。即通过^在开始和$结束时将其括起来。
不知道如何使用sed,但你可以尝试awk
awk '{a=a"\n"$0; if ($0 == "x"){ a=$0}} END{print a}' file
Run Code Online (Sandbox Code Playgroud)