sed:删除文件前n个字符中的十六进制字符

Chr*_*ris 5 regex bash sed

我有一个模式:

201404018^@133^@^@1^@^2^@31@1^@^32
20140401^@8133^@3^@0^@^22@1^@^3
201404^@018133^@10^@3^@^4@12^@^321
20140401813322^@97^@^@5^@^23
Run Code Online (Sandbox Code Playgroud)

^@在上面代表NUL字符(0x00),我想在前14个字符(日期时间)内删除它们,但保留其余部分.就像:

20140401813312^@31@1^@^32
20140401813330^@^22@1^@^3
20140401813310^@3^@^4@12^@^321
20140401813322^@97^@^@5^@^23
Run Code Online (Sandbox Code Playgroud)

我试过了sed 's/^[0-9]{0,13}\x00//g'- 但那不会真的有用.

提前致谢!

cho*_*oba 6

Perl救援:

perl -pe 's/\x0// while ($i = index $_, "\x0") >= 0 and $i < 14' input-file
Run Code Online (Sandbox Code Playgroud)

对于每一行,它在位置低于14时删除零字节.

  • 像魅力一样......我也将使用perl;)谢谢! (2认同)