2017-10-27 1 views
1

私はファイル内のテキスト(変数に格納されているかどうか)を見つけるためにgrepを使用しているbashスクリプトを持っています。regexを使って `grep`を作ってみませんか?

found=$(grep "^$line$" "$file") 

私の問題は、私は正規表現を使用する必要があります。ただし、lineには正規表現のキーワードを含むテキストが含まれることがあります。 [これは失敗につながるgrep: Unmatched [です。

grepに$lineの内容を正規表現として解釈させてもらえませんか?

答えて

6

-Fフラグをgrepにすると、パターンを正規表現ではなく固定文字列として解釈させることができます。また

、 あなたは(あなたの^$line$パターンによって示唆されるように)あなたが-xフラグと組み合わせることができます パターンは、全体のラインを一致させたい場合。

だからあなたのポストでは、コマンドは次のように記述することができます:だから

$ cat file 
this 
[that 
not[ 
$ line=\\[   # escaped to mark [ as an ordinary character 
$ grep "$line" file 
that[ 
[not 
$ line=[is]   # [ is part of a proper regex 
$ grep "$line" file 
this 

:提供文字は通常の文字は、例えば、それらを適切にエスケープしているであることをgrepを伝えるために

found=$(grep -Fx "$line" "$file") 
+0

作品... THX – user1810087

-1

ウェイキーは、正規表現の文字をエスケープすることです:

$ line=[ 
$ echo "${line/[/\\[}" 
\[ 
$ grep "^${line/[/\\[}" file 
[that 

または使用することができます週:downvotingとき魔法のように

$ line=[that 
$ awk -v s="$line" '$0==s' file 
[that 
+0

コメントすることが通例です。 –

+0

私はあなたの答えを下落させていませんが、私の場合は 'line'はスクリプト内の変数であり、私は実際にその内容について制御することはできません。すべての可能なケースをカバーすることは、残虐なものになるでしょう... – user1810087

+0

まあ、それはプログラミングです。それが簡単だなんて誰も言わなかった。 @ヤノスは別の方法を示した。 –

関連する問題