1

我有二进制日志文件,其中包含由不可打印字符“^A”分割的类似行。

当我使用命令“less”打开文件时,我看到这个符号背光为白色

blah9234^Azzz123^A1=123
blah6344^Azzz123^A1=456
blah4555^Azzz123^A1=78912

我需要将其转换为:

zzz123^A1=123^Ablah9234
zzz123^A1=456^Ablah6344
zzz123^A1=78912^Ablah4555

所以我需要参加第一部分

blah9234

添加不可打印符号 ^A

^Ablah9234

并将其放入行中

zzz123^A1=123^Ablah9234

首先,我尝试将 ^A 添加到行首:

sed 's/^.*blah/^Ablah/' my.log > new.log

但它只是添加了'^'和'A',我得到了:

^Ablah9234^Azzz123^A1=123

并且第一个 ^A 在较少的查看器中不会背光白色。

任何建议都会有所帮助。谢谢。

4

1 回答 1

2

你可以这样做:

sed 's/^.*blah'$'\001''blah/' my.log > new.log

或者:

#get the value of the ^A control character
ctrlACode=$'\001'

#use it when we call sed
sed 's/^.*blah'"$ctrlACode"'blah/' my.log > new.log

要理解第二个示例,您需要了解这一点。 基本上,$'\0xx'等于具有八进制值的控制字符。例如,$'\000'NUL控制字符。$'\001'^ASOH控制字符等。


在这里可以找到更简单的方法

这样,您键入ctrl-vthenctrl-a即可插入^A

于 2016-09-06T20:33:53.857 回答