2013-04-03 3 views
0

У меня есть двоичный файл, который содержит строки в следующем виде:Grep через двоичный файл

blabla^A2013.04.03-09:35:04^Ablabla 

где ^A является двоичным характер 001.

Я хочу, чтобы иметь возможность выполнить grep, который даст мне только то, что находится между ^A (не вся строка).

Я знаю, что флаг -o только на матч, но я не знаю, как искать этот двоичный символ

ответ

0

Вы должны иметь возможность включить control-A в командной строке, просто набрав control-A, где вы хотите, чтобы он появился. В худшем случае вам может понадобиться ввести control-V перед этим. Вы также можете исследовать обозначения, используя bash's ANSI-C quoting, такие как $'\001'.

+0

приятно! мы приближаемся. «control-V control-A» сделал трюк, так что теперь я могу найти первый^А, но как найти конечный? Я попробовал «grep -o»^A *^A »', но это не то, что я считаю:^A, чем что-либо, пока другой^A – user1692261

+0

не получил его. Я использовал: '^ A [^^ A] *^A' – user1692261

+0

Вам понадобится' grep -o '^ A [^^ A] *^A "или около того; это подберет контроль-A на каждом конце. У меня возникло бы желание использовать 'sed' вместо' grep' для этого: 'sed 's /.*^A \ ([^^ A] * \)^A. */\ 1 /''. –

0

Попробуйте сделать это:

grep --binary-files=text pattern file.txt 

так:

$ grep --binary-files=text -oP '\^\K[^\^]+(?=\^)' file.txt 
A2013.04.03-09:35:04 
+0

но какой у вас образец? Я пробовал '^ A' и' 001' и '\ 001' не из них работал – user1692261

+0

См. Мой отредактированный пост, есть полное рабочее регулярное выражение –

Смежные вопросы