ログファイル(application.log)があり、次の通常および特殊文字の文字列が複数行に含まれている可能性があります。
*^%Q&$*&^@$&*!^@$*&^&^*&^&
この特殊文字列を含む行番号を検索したい。
grep '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log
上記のコマンドは結果を返しません。
行番号を取得するための正しい構文は何ですか?
回答:
教えてgrep
使用して固定文字列としてあなたの入力を治療するための-F
オプションを選択します。
grep -F '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log
-n
行番号を取得するにはオプションが必要です。
grep -Fn '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log
^
、$
、.
、*
と\
。または、あなたも試すことができfgrep
ます。
fgrep
と同じgrep -F
です。
egrep '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log
たら?
私のために働いたものは:
grep -e '->'
-eは、次の引数がパターンであり、引数として解釈されないことを意味します。
送信元:http : //www.linuxquestions.org/questions/programming-9/how-to-grep-for-string-769460/
-
には、stackoverflow.com
キャリッジリターン、つまり\r
文字、またはをgrep 0x0d
するには、次のようにします。
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マニュアル> ANSI-C引用を参照してください。
$ 'string'形式の単語は特別に扱われます。単語は文字列に展開され、バックスラッシュでエスケープされた文字はANSI C標準で指定されているとおりに置き換えられます
英数字とスペースを削除してみてください。そして、使用する-n
と行番号が表示されます。以下を試してください:
grep -vn "^[a-zA-Z0-9 ]*$" application.log
-bオプションを指定してviを試してください。これにより、特殊な行末文字が表示されます(通常、これを使用して、UNIX OS上のtxtファイルでWindowsの行末を確認します)
しかし、スクリプトソリューションが必要な場合は明らかにviは機能しないため、grepで-fまたは-eオプションを試して、その結果をsedまたはawkにパイプできます。grep manページから:
マッチャー選択-E、-extended-regexp PATTERNを拡張正規表現として解釈します(ERE、以下を参照)。(-EはPOSIXで指定されています。)
-F, --fixed-strings
Interpret PATTERN as a list of fixed strings, separated by newlines, any of which is to be matched. (-F is specified
by POSIX.)
^@
:は^
、@
またはヌル文字が後に続くことを意味しますか?