Bash cat文件-如果存在”;字;打印“上方的行”;字;
我有一些文本文件,例如Bash cat文件-如果存在”;字;打印“上方的行”;字;,bash,awk,sed,scripting,Bash,Awk,Sed,Scripting,我有一些文本文件,例如 ######## cat file.txt aaaa bbbb cccc dddd From CN Country eeee ffff From UK Country gggg ............ 现在,如果文件中出现“国家”一词,则只打印该词上方的行,例如 ####### some magic command print dddd ffff 我想我可以用这个: awk–如:awk'/Country/{found=0}{if(found)prin
######## cat file.txt
aaaa
bbbb
cccc
dddd
From CN Country
eeee
ffff
From UK Country
gggg
............
现在,如果文件中出现“国家”一词,则只打印该词上方的行,例如
####### some magic command print
dddd
ffff
我想我可以用这个:
- awk–如:
–无效,并且我知道所有与此选项的组合:/awk'/Country/{found=0}{if(found)print}/{found=1}'file.txt
- sed–如:
–如上所述sed-n'1、/Country/p'file.txt
awk
:
awk '/Country/ {print previous}; {previous=$0}' file.txt
示例:
$ cat file.txt
aaaa
bbbb
cccc
dddd
From CN Country
eeee
ffff
From UK Country
gggg
$ awk '/Country/ {print previous}; {previous=$0}' file.txt
dddd
ffff
打印一行前导上下文-b1
-v
--反向匹配
“Country\\\124;--”
被转义或\\124;
-n
,在图案空间中读取两行,如果第二行包含单词Country
,则打印第一行
sed -n '/Country/{x;p};x' tmp
-n->禁止自动打印图案空间
x->交换图案并保留空间,以便前一行位于图案空间缓冲区中
p->打印前一行(保留空间是多少)
;x->如果行中不包含国家,则交换保持和模式并再次运行。耶稣基督如此平庸:D-谢谢你@heemayl!:)不客气。仅供参考,尽管POSIX说您需要一个
代码>在一个动作块之后,你不需要。因为大多数awk脚本不需要这样做,所以如果需要的话,它就会中断。
sed -n 'N;/\n.*Country/P;D' file
sed -n '/Country/{x;p};x' tmp