Sed - соответствие шаблона с двоичным значением в качестве разделителя? - PullRequest
2 голосов
/ 19 мая 2011

Можно ли использовать двоичные значения при sed сопоставлении с образцом?

У меня есть строки в одну строку, которые содержат текстовые поля, разделенные двоичным значением 1 как разделитель.

Можно ли использовать sed для всего, вплоть до двоичного разделителя 1?

Или я должен использовать awk?

Пример строки, где \x1 представляет двоичное значение 1:

key1=value1\x1key2=value2\x1key3=value3

Пример ожидаемого вывода, значения для key1 и key2:

value1 value2

Ответы [ 3 ]

3 голосов
/ 19 мая 2011

edit : Вот несколько вариантов печати значений, основанных на списке ключей, не удалось найти более краткий способ с awk, но один из них, вероятно, существует:

$ echo -e 'key1=value1\001key2=value2\001key3=value3' > test

$ sed 's/\x01/\n/g' test | awk -F= '{if ($1 == "key1" || $1 == "key2") print $2}'
value1
value2

$ sed 's/\x01/\n/g' test | perl -pe 's/((key1|key2)=(.*)|.*)/\3/'
value1
value2

Вы не можете сопоставить все до первого \x1, поскольку sed не поддерживает сопоставление без жадности, вы можете использовать другой язык или что-то вроде следующего:

$ sed 's/\x01/\n/g' test | head -n 1
key1=value1

Ответ на следующий вопрос имеет хороший пример использования регулярного выражения Perl для не жадных совпадений:
Не жадное сопоставление регулярных выражений в sed?

0 голосов
/ 19 мая 2011

Тип Control-A в точке, где вы хотите, чтобы появился символ \001.

Я бы нашел это намного проще, чем обрабатывать все необходимые экранирования для получения echo чтобы получить правильную строку, если в регулярном выражении есть обратные слэши - и я нахожу, что часто такие обратные слэши.

0 голосов
/ 19 мая 2011

Вы должны найти способ получить \ x1 в двоичном виде в команде, так как sed не анализирует его.Например, чтобы преобразовать их все в новые строки:

sed -e "s/$(echo -e \\001)/\n/g" filename
...