web-dev-qa-db-ja.com

Unixの特殊文字のgrep

ログファイル(application.log)があり、複数行に次の通常および特殊文字の文字列が含まれている場合があります。

*^%Q&$*&^@$&*!^@$*&^&^*&^&

この特殊文字列を含む行番号を検索したい。

grep '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log

上記のコマンドは結果を返しません。

行番号を取得するための正しい構文は何でしょうか?

75
Avinash Sonee

-Fオプションを使用して、入力を固定文字列として扱うようにgrepに指示します。

grep -F '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log

行番号を取得するには、オプション-nが必要です。

grep -Fn '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log
139

私のために働いたのは:

grep -e '->'

-eは、次の引数がパターンであり、引数として解釈されないことを意味します。

From: http://www.linuxquestions.org/questions/programming-9/how-to-grep-for-string-769460/

75
Tom Brito

関連するメモ

復帰、つまり\r文字、または0x0dをgrepするには、次のようにします。

grep -F $'\r' application.log

あるいは、POSIX互換性のためにprintfまたはechoを使用します

grep -F "$(printf '\r')" application.log

そして、hexdumpまたはlessを使用して、結果を参照できます:

$ printf "a\rb" | grep -F $'\r' | hexdump -c
0000000   a  \r   b  \n

$'\r'およびその他のサポートされている文字の使用については、 Bash Manual> ANSI-C Quoting を参照してください。

$ 'string'という形式の単語は特別に扱われます。 Wordは文字列に展開され、ANSI C標準で指定されているようにバックスラッシュでエスケープされた文字が置き換えられます

6
ryenus

英数字とスペースを削除してみてください。そして、-nを使用すると、行番号が表示されます。以下を試してください:

grep -vn "^[a-zA-Z0-9 ]*$" application.log

2
R. Kumar
grep -n "\*\^\%\Q\&\$\&\^\@\$\&\!\^\@\$\&\^\&\^\&\^\&" test.log
1:*^%Q&$&^@$&!^@$&^&^&^&
8:*^%Q&$&^@$&!^@$&^&^&^&
14:*^%Q&$&^@$&!^@$&^&^&^&
2
Mani