4

У меня очень быстрый вопрос к вам, ребята. Просматривая здесь документацию и сайт, мне стало интересно, можно ли было, чтобы grep не выводил каждое совпадение в одной строке.

В моем примере мне нужно взять строку в формате \xeb\x1a\x5e\x31\xc0\x88\x46\x07... и т.д. Я использую grep -oP "x\K(\S\S)") чтобы получить каждую шестнадцатеричную цифру.

Вывод правильный, однако каждое совпадение находится на отдельной строке. Это проблема, потому что мне нужно передать этот вывод в другую программу. Итак, еще раз, есть ли способ поставить каждый матч последовательно без какого-либо заполнения?

2 ответа2

3

Вы можете передать вывод в tr , например,

grep -oP "x\K(\S\S)") | tr -d '\n'

Это стоит дополнительного процесса, то есть замедляет вашу программу. Если это проблема, вы можете использовать sed или awk .

0

Работает ли оно, если вы передадите его в sed для удаления всех символов новой строки (\n)?

echo \xeb\x1a\x5e\x31\xc0\x88\x46\x07 | grep -oP "x\K(\S\S)" | sed ':a;N;$!ba;s/\n//g'

Ссылка: Как я могу заменить символ новой строки (\n) с помощью sed?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .