2016-09-11 12 views
2

上記の「言葉」のプリントラインが存在する場合、私はいくつかのテキストを持つファイル、例えば、ファイルに今すぐ場合猫のファイル - 「言葉」

######## 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 –誰も私を助けることができますか? :)

答えて

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 
+0

イエスキリストそのようなバニラリティ:D - ありがとうu @heemayl! :) – Najkon

+1

@エドモトン完了..ありがとう。 – heemayl

+0

ようこそ。 POSIXはアクションブロックの後に ';'が必要だと言っていますが、あなたはそうしていません。ほとんどのawkスクリプトはそれをしないので、今のところawkはそれを必要としません。 –

1
$ grep -B 1 Country foo|grep -v "Country\|--" 
dddd 
ffff 
  • -B 1プリントリーディングコンテキストの1つのライン
  • -v--invert-match
  • "Country\|--"\|これは(GNU SED)あなたのために働くかもしれないエスケープするか
2

さ:

sed -n 'N;/\n.*Country/P;D' file 

は、grepのようなスイッチ-nを使用して、パターンスペースに2行を読んで2番目に「Country」という単語が含まれている場合は、最初の文字を印刷します。

0
sed -n '/Country/{x;p};x' tmp 

-N - >パターンを交換し、前のラインパターンの空間バッファになるようにスペースを保持する - >パターンスペースの自動印刷

Xを抑制する。

p - >前の行を印刷します(ホールドスペースとは何ですか)。

; x - >行に国が含まれていない場合は、ホールドとパターンを入れ替えてもう一度実行します。