リテラル文字列のGrep


100

純粋にリテラルな文字列を検索するgrepタイプのツールを探しています。別のログファイルの行の一部として、ログファイルの行の出現を探しています。検索テキストには、あらゆる種類の正規表現の特殊文字を含めることができます[]().*^$-\

正規表現を使用せず、文字列のリテラル出現を検索するだけのUnix検索ユーティリティはありますか?


質問がgrepリテラル文字列を検索できるか」ではなかったのはなぜですか。grepそのようなものはリテラル文字列を検索できますか?」の代わりに マイナスドライバーはフィリップスのネジ頭に適合します;)
ADTC

回答:


135

そのために-Fオプションを指定してgrepを使用できます。

-F, --fixed-strings       PATTERN is a set of newline-separated fixed strings

「改行で区切られた固定文字列」これをターミナルプロンプトで実行するにはどうすればよいですか?パターンファイルを作成できることはわかっていますが、ファイルがなくてもプロンプトで実行できますか?Enterキーを押すと、明らかにコマンドが実行されます。
ADTC

13
私自身の質問にお答えします。:)-eオプションの繰り返しを使用して、複数の固定文字列を提供する必要があるだけです。このように:grep -F -e "fixed1" -e "fixed2" -e "fixed3" -e "fixed4"。改行は必要ありません;)
ADTC 2015

2
Solarisでは使用できません。代わりfgrepに使用されます。
majkinetor 2016年

2
@ADTC特殊文字のみを含む検索文字列には一重引用符を使用する必要があることがわかりました。それ以外の場合は何も見つかりません。したがって、これは結果を返しませんでした:grep --include=\*.php -FRn -e "$$"シングルクォートを使用すると、希望する結果が得られました:grep --include=\*.php -FRn -e '$$'
Piemol

2
あなた正しい@ADTCです。$他のいくつかの文字は特別であり、Enterキーを押した後、grep(または任意のコマンドが)実行される前にbashに置き換えられます。bashにすべての文字(単一引用符を除く)を変更せずに単一引用符で囲むように指示できます。あなたは、単一引用符を入力する必要がある場合はこのようにそれを行う'I'\''m special'
ndemou

14

それはどちらか、fgrepまたはgrep -F正規表現を行わないでしょう。fgrepと同じですgrep -Fが、本質的に怠惰であるため、引数について心配する必要はありません:-)

grep   ->  grep
fgrep  ->  grep -F  (fixed)
egrep  ->  grep -E  (extended)
rgrep  ->  grep -r  (recursive, on platforms that support it).

GNU grepの場合、fgrepはgrepへのシンボリックリンクとして提供されているため、-F
Daenyth

3
egrepそして、fgrepPOSIX標準で指定されていません。grep -Fそして、grep -E ある
リチャード・ハンセン


3

awkを使用することもできます。これは、固定文字列を検索する機能やプログラミング機能(例:

awk '{for(i=1;i<=NF;i++) if($i == "mystring") {print "do data manipulation here"} }' file

2
cat list.txt
one:hello:world
two:2:nothello

three:3:kudos

grep --color=always -F"hello

three" list.txt

出力

one:hello:world
three:3:kudos

2
同意しません。これがどのように機能するかを示す便利なイラストです。
timwaagh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.