2013-08-09 3 views
25

grep正規表現で変数を使用しようとしています。私は失敗の例を投稿し、grepコマンドの実行中に変数を評価させる方法を提案する人もいます。私は${var}も試しました。grep regexのシェル変数

$ string="test this" 
$ var="test" 
$ echo $string | grep '^$var' 
$ 

私のregexは "test"で始まる行と一致する必要があるので、それを通ってエコーされた行を出力するはずです。

$ echo $string 
test this 
$ 
+3

まあ、私はそれが二重引用符で動作します考え出したと思います。 –

+1

二重引用符を修正してください。二重引用符の中では、バックスラッシュとEOL '$'をエスケープする必要があることを覚えておいてください。 – Kevin

+0

[bashスクリプトへのgrepコマンドの追加]の複製が可能です。(http://stackoverflow.com/questions/5142729/add-grep-command-to-bash-script) – tripleee

答えて

33

二重引用符を使用する必要があります。一重引用符はシェル変数がシェルによって補間されるのを防ぎます。パターンの一部として$を正規表現で使用した場合に、シェルが補間を行わないようにするには、一重引用符を使用します。二重引用符を使用している場合は、にバックスラッシュを使用して$を引用することもできます。

さらに変数を中括弧${var}に入れてパターンの残りの部分と区別する必要があるかもしれません。

例:

$ string="test this" 
$ var="test" 
$ echo $string | grep "^$var" 
+0

例のコードには中括弧はありますか? – moejoe