File:
O000000667520994000000074720121112000000N^@^@^@
Ho usato il comando seguente ma non funziona.
grep "^@^@^@" *
File:
O000000667520994000000074720121112000000N^@^@^@
Ho usato il comando seguente ma non funziona.
grep "^@^@^@" *
Risposte:
Puoi grep per qualsiasi personaggio incluso controllo / caratteri non stampabili in modalità perl-regexp (-P) con il suo codice esadecimale:
grep -Pa '\x00' ...
grep -Pv '\x00' file
non funziona in Cygwin ...
-a
(a volte?) non trova nemmeno lo schema. Grazie! Potrebbe aiutare anche @pbies.
^@
non è un carato ^
e un segno @
, è un personaggio. È come alcuni programmi visualizzano il carattere NUL — valore ASCII 0, noto anche come \0
in C.
Qui ho creato un file con un byte NUL in esso. † Si noti che utilizzo cat -v
per mostrare caratteri non stampabili.
$ cat -v blah
hello
null^@
hi
$ hexdump -C blah
00000000 68 65 6c 6c 6f 0a 6e 75 6c 6c 00 0a 68 69 0a |hello.null..hi.|
0000000f
Grep ha difficoltà a trovare NUL poiché sono usati per terminare le stringhe in C. Sed, tuttavia, possono fare il lavoro:
$ sed -n '/\x0/p' blah
null
$ sed -n '/\x0/p' blah | cat -v
null^@
† In vi, nella modalità di inserimento premere Ctrl- V, Ctrl- Shift- @per inserire un byte nullo.
In bash puoi aggiungere caratteri speciali quando sono prefissati con C-q
oC-v
. Quindi puoi, per esempio
grep 'Ctrl-vCtrl-a' file.txt
La stringa di ricerca deve essere letta come control key
+ character v
, seguita da control key
+ character a
, che cerca il valore ASCII SOH (01). Sfortunatamente questo non funziona per il personaggio NUL.
^ @ è il carattere NUL. Cosa vuoi fare con le righe dei tuoi file che lo contengono?
Puoi dare un'occhiata a /programming/2398393/identifying-and-removing-null-characters-in-unix che tratta un problema simile.
Il personaggio ^ @ è il carattere NUL, quindi temo che non possa essere diretto direttamente.
La tua migliore opzione sarebbe probabilmente quella di scrivere un semplice programma che cerchi questa sequenza di byte.
In alternativa si può tentare di convertirlo in una qualche forma di dump esadecimale ( od
, xxd
o giù di lì) e grep nell'uscita di esso. Ma francamente, sarebbe difficile farlo bene.
-a
un'opzione, altrimentigrep
pensa che siano dati binari e non visualizzerà le linee corrispondenti.