2012-03-12 3 views
2

私の問題を説明する例を示します。変数名は「$」行の終わりを意味perlのパターン$との競合があるので、私は、それは間違っている知っている変数をsed検索パターンで使用する方法

sed -n "/$VARIABLE,test/p" aFile 

VARIABLE='some string' 

は、私は次のようにファイル内の文字列を検索したいです。

だから私の質問です:sedのパターン検索で変数を使用する方法はありますか?

+5

に役立ちます願っています。あなたの問題は '/ $ VARIABLE、+ 4 /'はおそらく '/ $ VARIABLE /、+ 4'です。 – Benoit

答えて

3

sedの範囲表記、つまり/ start /、/ end /?を使用しようとしているようです。あれは正しいですか?

すべてを行う必要が欠落している追加の「/」文字を追加する、すなわち

sed -n "/$VARIABLE/,/test/p" aFile 

範囲は、行番号、文字列/ regexs、および/または相対行番号で構成することができますされている場合(負帰還なし)。

sed -n "1,20p" aFile 
# prints lines 1-20 

sed -n '/start/,/end/p' aFile 
# prints any text (include current line) 
# with start until it finds the word end 

sed -n '/start/,+2p' aFile 
# prints line matching start and 2 more lines after it 

私は説明をsimplfyする/regex/パターンの文字列を使用しています。 あなたはそれらについて学ぶので、/^[A-Za-z_][A-Za-z0-9_]*/などのような本当のrex-exを行うことができます。

「$」についてのコメントごとに、sedは評価中のreg-exに文字が表示されている場合にも 'end-of-line'の指標として '$'を使用します。また、いくつかの例でdbl-quotesまたはsingle-quotesを使用する方法に注意してください。一重引用符は、式sed -n '/$VARIABLE/,/test/p' aFileがリテラル文字と一致し、$がreg-exの末尾にないため、通常の文字として使用されることを意味します。 '$'は、行末(reg-ex(part))の最後にあるときにのみ行末として適用されます。例えば、/start$|start2$/を実行することができ、それらの両方が行末を示します。

他の人が指摘したように、

sed -n "/$VARIABLE/,/test/p" aFile 

のご使用は、あなたのテキストを確保したい場合にはSOの終わりに固定された

sed -n "/some text/,/test/p" aFile 

にシェル変数explasionを経由して変換されますあなたは書くことができる

sed -n "/$VARIABLE$/,/test/p" aFile 

に展開します。
sed -n "/some text$/,/test/p" aFile 

は、私は、これはシェルが `sed`を産卵する前に二重引用符の内側に` $ VARIABLE`を展開し

+1

最後の行をsed-n "/ some text $ /、/ test/p" aFileにしないでください。 –

+0

@SébastienClément:うん!あなたが正しい。それを修正します。あなたの慎重な目に感謝;-) – shellter

関連する問題