我有一些文件,例如,
######## cat file.txt
aaaa
bbbb
cccc
dddd
From CN Country
eeee
ffff
From UK Country
gggg
............
现在,如果在文件中出现“国家”字样,则只打印该字词上方的行,例如,
####### some magic command print
dddd
ffff
我想我可以用它:
awk '/Country/{found=0} {if(found) print} //{found=1}' file.txt
- 无济于事,并且我知道这个选项的组合:/ sed -n '1,/Country/p' file.txt
- 如上所述任何人都可以帮助我吗? :)
答案 0 :(得分:3)
使用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
答案 1 :(得分:2)
这可能适合你(GNU sed):
sed -n 'N;/\n.*Country/P;D' file
使用类似grep的开关-n
并在模式空间中读取两行,如果第二行包含单词Country
则打印第一行。
答案 2 :(得分:1)
$ grep -B 1 Country foo|grep -v "Country\|--"
dddd
ffff
-B 1
打印1行主要上下文 -v
--invert-match
"Country\|--"
\|
已转义或答案 3 :(得分:0)
sed -n '/Country/{x;p};x' tmp
-n - >抑制模式空间的自动打印
x - >交换模式并保持空间,以便前一行位于模式空间缓冲区中。
p - >打印上一行(什么是保留空间)。
; x - >如果line不包含country,则交换hold和pattern并再次运行。