ログファイル(application.log)があり、複数行に次の通常および特殊文字の文字列が含まれている場合があります。
*^%Q&$*&^@$&*!^@$*&^&^*&^&
この特殊文字列を含む行番号を検索したい。
grep '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log
上記のコマンドは結果を返しません。
行番号を取得するための正しい構文は何でしょうか?
-F
オプションを使用して、入力を固定文字列として扱うようにgrep
に指示します。
grep -F '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log
行番号を取得するには、オプション-n
が必要です。
grep -Fn '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log
私のために働いたのは:
grep -e '->'
-eは、次の引数がパターンであり、引数として解釈されないことを意味します。
From: http://www.linuxquestions.org/questions/programming-9/how-to-grep-for-string-769460/
復帰、つまり\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標準で指定されているようにバックスラッシュでエスケープされた文字が置き換えられます
英数字とスペースを削除してみてください。そして、-n
を使用すると、行番号が表示されます。以下を試してください:
grep -vn "^[a-zA-Z0-9 ]*$" application.log
grep -n "\*\^\%\Q\&\$\&\^\@\$\&\!\^\@\$\&\^\&\^\&\^\&" test.log
1:*^%Q&$&^@$&!^@$&^&^&^&
8:*^%Q&$&^@$&!^@$&^&^&^&
14:*^%Q&$&^@$&!^@$&^&^&^&