2016-08-14 4 views
0

のパスを選択しようとしています。$PATHです。それを選ぶために、私は作った行頭文字 "^"と行末 "[]"の正規表現を書くには?

grep -q "[:|^]$TARGET_PATH[$|:]" 

しかし、それは動作しません。

[]では、「^」という行頭と「$」という行末がうまくいきません。

解決策を教えてください。

+1

それは範囲からの最初の文字でない場合は、 '^は'そのリテラル値を保持します。 '$'は文字の範囲内で特別な意味を持ちません。 '|'と同じです。 – axiac

答えて

2

あなたは、このチェックはgrepを必要としない代わりに、[]class of characters or character sets

grep -q -E "(:|^)\$TARGET_PATH($|:) 
+0

ありがとうございました。それは正規表現の拡張子を-Eで使用しているようです。それは、通常の正規表現で[]で^ norも使用できないということですか?私はちょうどそれをチェックしたい。ありがとうございました。 – mora

+1

@mora(bashとgrepのバージョンによって異なります)、 '-E'を使わない場合は、'() ':' \(:|^\) 'をエスケープする必要があります。 – VonC

+1

注:この環境変数の背後にある実際の値をgrepする場合は、 'TARGET_PATH'の前の' \ $ 'をエスケープしないでください。 – VonC

1

alternation with ()を試すことができます。

[[ $PATH =~ (^|:)"$TARGET_PATH"(:|$) ]] && echo "found" | echo " not found" 
1

正規表現はクールですが、この場合は単純に必要ありません。

検索対象の文字列($PATH)を区切り文字(:)にラッピングするだけです。この方法では、検索対象の文字列が$PATHにある場合は、常に:文字で囲まれていることがわかります。

文字列:$TARGET_PATH:(なしregex)のための通常の検索は、それが$PATHで存在だ場合はあなたを伝えるのに十分である:

cat ":$PATH:" | grep ":$TARGET_PATH:" 
+0

私に与えてくれてありがとう!ああ!溶液。 – mora

関連する問題