Заменить смешанные escape-последовательности, управляющие символы и литералы на Sed? - PullRequest
1 голос
/ 14 июля 2011

У меня есть странное сочетание буквенных, видимых и экранированных управляющих символов в дампе данных, который мне нужно очистить (желательно с sed ), например ^ A , ^ B , \ N (буквально) и видимые символы новой строки. Мне нужно очистить файл так, чтобы видимые символы новой строки остались нетронутыми, заменить каждый ^ A символом табуляции и удалить каждую ^ B \ N ^ B \ N (которая следует за каждым значением времени unix в данных например, 13068505731812510).

Вот как выглядит содержимое, используя less в команде оболочки (в оболочке символы ^ A и ^ B имеют темный фон для обозначения контрольных символов ):

^ A guid ^ A unix-time ^ B \ N ^ B \ N ^ A 4 ^ A 192.168. 21.136 ^ A 7.0 ^ A IE ^ A 8 ^ A guid ^ A WinNT ^ A ... (видимый перевод строки)

Или буквальный пример ...

... ^A40C4595C-0B9D-46B7-8214-3D9CE2B5F057^A13071154505579551^B\N^B\N^A4^A192.168.21.136^A7.0^AIE^A8^AE6979203-F58B-4D20-9D66-7F5369BF9E32^AWinXP^A ...

Пока что экранирующие последовательности, которые я кормил sed , не дали ожидаемого результата. Кто-нибудь знает магические побеги, необходимые для того, чтобы все это произошло за как можно меньшее количество проходов? (Есть много концертов файлов, и время имеет значение.) Спасибо! Бонусные баллы, если я смогу конвертировать цифры времени Unix в удобочитаемое время за один проход.

1 Ответ

0 голосов
/ 14 июля 2011

Измените ^ A на вкладки:

sed 's/\^A/'"$(printf '\011')"'/g'

Раздень наш ^ B ^ N:

sed -e 's/\^B\\N\^B\\N//g'
...