Mam plik dziennika (application.log), który może zawierać następujący ciąg normalnych i specjalnych znaków w wielu wierszach:
*^%Q&$*&^@$&*!^@$*&^&^*&^&
Chcę wyszukać numer (y) linii, które zawierają ten specjalny ciąg znaków.
grep '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log
Powyższe polecenie nie zwraca żadnych wyników.
Jaka byłaby poprawna składnia, aby uzyskać numery wierszy?
unix
search
grep
special-characters
Avinash Sonee
źródło
źródło
^@
: oznacza,^
po którym następuje@
lub znak nul?Odpowiedzi:
Powiedz,
grep
aby traktować dane wejściowe jako ustalony ciąg przy użyciu-F
opcji.grep -F '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log
Opcja
-n
jest wymagana, aby uzyskać numer linii,grep -Fn '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log
źródło
^
,$
,.
,*
i\
. lub możesz też spróbowaćfgrep
.fgrep
jest taki sam jakgrep -F
.egrep '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log
?grep -rinF '-static'
wydrukiInvalid option «t»
. Odpowiedź @ Mani zadziałała , tjgrep -rin "\-static"
.Ten, który działał dla mnie, to:
grep -e '->'
-E oznacza, że następny argument jest wzorcem i nie będzie interpretowany jako argument.
Od: http://www.linuxquestions.org/questions/programming-9/how-to-grep-for-string-769460/
źródło
-
, zobacz także stackoverflow.com/questions/2427913/…Powiązana uwaga
Aby grep do powrotu karetki, a mianowicie
\r
znak, lub0x0d
możemy to zrobić:Alternatywnie użyj
printf
lubecho
, aby uzyskać zgodność z POSIXI możemy użyć
hexdump
lub,less
aby zobaczyć wynik:Odnośnie użycia
$'\r'
i innych obsługiwanych znaków, zobacz Podręcznik Bash> Cytowanie ANSI-C :źródło
grep -n "\*\^\%\Q\&\$\&\^\@\$\&\!\^\@\$\&\^\&\^\&\^\&" test.log 1:*^%Q&$&^@$&!^@$&^&^&^& 8:*^%Q&$&^@$&!^@$&^&^&^& 14:*^%Q&$&^@$&!^@$&^&^&^&
źródło
Możesz spróbować usunąć wszelkie znaki alfanumeryczne i spacje. A następnie użyj
-n
poda numer linii. Spróbuj wykonać następujące czynności:grep -vn "^[a-zA-Z0-9 ]*$" application.log
źródło
Wypróbuj vi z opcją -b, to pokaże specjalne znaki końca linii (zwykle używam go do zobaczenia końców linii Windows w pliku txt w systemie operacyjnym unix)
Ale jeśli chcesz, aby rozwiązanie oparte na skryptach było oczywiste, vi nie zadziała, więc możesz wypróbować opcje -f lub -e z grep i przesłać wynik do sed lub awk. Ze strony podręcznika grep:
Wybór dopasowania -E, --extended-regexp Interpretuje WZÓR jako rozszerzone wyrażenie regularne (ERE, patrz poniżej). (-E jest określone przez POSIX.)
źródło