用Sed替换混合转义序列,控制字符和文字?

时间:2011-07-13 22:01:28

标签: sed escaping control-characters

我在数据转储中有一个奇怪的文字,可见和转义控制字符混合我需要清理(最好用 sed ),例如 ^ A ^ B \ N (字面意思)和可见的换行符。我需要清理文件,使可见换行符保持不变,用tab键替换每个^ A,并删除每个 ^ B \ N ^ B \ N (它跟随每个unix时间值)数据,例如13068505731812510)。

这是在shell命令中使用less的内容(在shell中, ^ 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 :(得分:0)

将^ A更改为标签:

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

剥去我们的^ B ^ N:

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