2016-08-09 9 views
0

私はのようなテキストの複数行を持つファイル持っている単語全体にマッチ:最初の発生を検索し、次の区切り文字までの印刷が、唯一の

foo 
1 
2 
3 
bar 
fool 
1 
2 
3 
bar 
food 
1 
2 
3 
bar 

をこれまでのところ、次は私に近い答えを与える:

sed -n '/foo/,/bar/ p' file.txt | sed -e '$d' 

... "food"や "fool"のような単語に出会うと、重複を導入することで失敗します。私は、全体の単語マッチを行うだけで(つまりはgrep -w)上記のコードを作成したいのですが、\ bスイッチを挿入する動作していないよう:

sed -n '/foo/\b,/bar/ p' file.txt | sed -e '$d' 

私は「foo」というの後に何を印刷したいです(最初のfooを含む)を「bar」まで上書きしますが、「foo1」ではなく「foo」のみに一致します。

+1

を参照してください:[スタックオーバーフローの正規表現のFAQ](http://stackoverflow.com/a/22944075/3776858) – Cyrus

答えて

2

は、正規表現を使用して、それぞれのラインの開始と終了を示すために^$トークン:

sed -n '/^foo$/,/^bar$/ p' file.txt 
+0

おかげで、これは完全にこの例のために働いていました! – supertonic09

+0

...これを展開して、 "Name = foo"のような前後の非単語構成文字を処理し、正の一致としてカウントすることは可能ですか? @heemayl – supertonic09

+0

@ supertonic09はい、可能なら 'sed -n '/^[^ [:alpha:]] * foo [^ [:alpha:]] * /、/^[^ [:alpha:]] * bar [^ [:alpha:]] */p 'file.txt'はあなたのために働いています.. – heemayl

0
sed -n '/\<foo\>/,/\<bar\>/ p' file.txt 

それともfooとbarは、任意の行の最初の単語であることを持っている場合、このことがあります。

sed -n '/^\<foo\>/,/^\<bar\>/ p' file 
関連する問題