Özel karakter NUL için grep (^ @ ^ @ ^ @)


26

Dosya:

O000000667520994000000074720121112000000N^@^@^@ 

Aşağıdaki komutu kullandım ama işe yaramadı.

grep "^@^@^@" *
linux  unix 

Yanıtlar:


52

Perl-regexp modunda (-P) kontrol / yazdırılamayan karakterler de dahil olmak üzere herhangi bir karakter için hex kodunu kullanabilirsiniz.

grep -Pa '\x00' ...

5
-aSeçenek eklemek isteyebilirsiniz , aksi takdirde grepikili veri olduğunu düşünür ve eşleşen satırları görüntülemez.
mpy

Dosyanın yalnızca ASCII = 0 bayt içerip içermediğini kontrol etmenin bir yolunu bulamıyorum grep -Pv '\x00' file...
Cygwin'de

@mpy Olmadan -a(bazen?) desen bile bulamaz. Teşekkürler! Pbies de yardımcı olabilir.
Michel de Ruiter

13

^@Karat ^ve tabelasını değil @, bir karakter. Bazı programların NUL karakterini göstermesi - ASCII değer 0, \0C olarak da bilinir .

Burada NUL baytında bir dosya oluşturdum. Yazdırılmayan cat -vkarakterleri göstermek için kullandığımı fark et.

$ 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, C dizelerini sonlandırmak için kullanıldıklarından NUL bulmakta zorlanıyor. Ancak Sed, işi yapabilir:

$ sed -n '/\x0/p' blah
null
$ sed -n '/\x0/p' blah | cat -v
null^@

vi modunda , boş mod girmek için Ctrl- V, Ctrl- Shift- düğmelerine basın @.


3

Eğer grep -Pişi (örneğin OS X) değil, şunu deneyin:

grep -E '\x00' ...

Bunun işe yarayacağına emin misin?
Sürümüm ile yapmıyorum

3
Bu cevap BSD grep içindir, GNU grep için en iyi cevabı deneyin:grep -Pa '\x00' ...
robinst

1

Bash'de C-qveya ile ön eklendiğinde özel karakterler ekleyebilirsiniz C-v. Mesela örneğin

grep 'Ctrl-vCtrl-a' file.txt

Arama dizgisi control key+ character v, ardından ASCII SOH (01) değerini arayan control key+ ile okunmalıdır character a. Ne yazık ki bu NUL karakteri için işe yaramıyor.


Muhtemelen, aslında böyle bir karakter dizisinin kelimenin tam anlamıyla yazılması gerektiği, bunun yerine klavyeye mantıksal olarak girilmesi gerektiği anlamına gelmiyor mu?
Monica

Evet tabi ki. Bu, kontrol tuşu basılı tutulur, v tuşuna basın, ardından Kontrol tuşu basılı tutun a tuşuna basın.
Olaf Dietsche 17:12

Bence cevabındaki net değil.
Monica

@LightnessRacesinOrbit İpucu için teşekkürler. Cevapta açıklığa kavuşturmaya çalıştım.
Olaf Dietsche,

@JohnKugelman düzenleme için teşekkürler. Görünüşe göre yardıma daha yakından bakmalıydım.
Olaf Dietsche,


-3

Karakter ^ @, NUL karakteridir, bu yüzden doğrudan çizilemeyeceğinden korkuyorum.

En iyi seçeneğiniz muhtemelen bu bayt sırasını arayan basit bir program yazmak olabilir.

Alternatif olarak, onu onaltılık bir döküme ( od, xxdya da öylesine) dönüştürmek ve çıktısını almak için deneyebilirsiniz . Ama açık konuşursak, doğru yapmak zor olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.