0

bashスクリプトを使用して、テキスト内の整数をgrepしようとしています:

#!/bin/bash
var=string2    
cat file.txt | grep -oP '(?<=string1)(\d.*)(<=$var)'  

しかし、スクリプトは何も出力しません。
「$var」の代わりに「string2」を入力すると、期待どおりの結果が得られます。
何らかの方法で変数をエスケープする必要があると思いますが、その方法がわかりません。
二重引用符、中括弧、エスケープされた二重引用符を試しましたが、何も機能しません。
また、stackoverflow man grep と google も検索しました。
それで、それを行う適切な方法は何ですか?
ありがとう

4

2 に答える 2

2

変数は、単一引用符ではなく、二重引用符内でのみ展開されます。したがって、次のようになります。

cat file.txt | grep -oP "(?<=string1)(\d.*)(<=$var)"
于 2012-10-19T16:40:29.660 に答える
1

間違った引用符:

$ echo '(?<=string1)(\d.*)(<=$var)'  
(?<=string1)(\d.*)(<=$var)

その間:

$ echo "(?<=string1)(\d.*)(<=$var)"
(?<=string1)(\d.*)(<=string2)

echogrepが表示されるかを示します。

于 2012-10-19T16:40:19.817 に答える