sed从文件中删除空字节的意图是什么?我尝试着:
s/\000//g
但这就是去除零的字符串。
s/\x00//g
似乎没有效果。我正在尝试在sed脚本中执行此操作,因此我不确定该echo技巧是否有效。
sed从文件中删除空字节的意图是什么?我尝试着:
s/\000//g
但这就是去除零的字符串。
s/\x00//g
似乎没有效果。我正在尝试在sed脚本中执行此操作,因此我不确定该echo技巧是否有效。
Answers:
我不知道您如何使用来实现此目标sed,但这是可以使用的解决方案tr:
tr < file-with-nulls -d '\000' > file-without-nulls
这是一种sed在某些情况下但并非在所有情况下都适用的解决方案:
sed 's/\x0//g' file1 > file2
此解决方案涉及将空格字符替换为在所有情况下均适用的空格:
sed 's/\x0/ /g' file1 > file2
-i用于将文件转换到位的参数。
使用Perl执行正则表达式非常容易。只需替换sed为perl -np -e:
$ printf 'one\0two\0' | perl -np -e 's/\0/\n/g'
one
two
使用该-n选项,正则表达式会像sed一样逐行运行。
如果要使用零字节作为记录分隔符,请使用Perl的-0选项。
$ printf 'one\0two\0' | perl -np0 -e 's/^/prefix /; s/\0/\n/g'
prefix one
prefix two
$ printf 'one\0two\0' | perl -np -e 's/^/prefix /; s/\0/\n/g'
prefix one
two
您可以通过运行查找Perl的命令行选项perldoc perlrun。
为了匹配一个空字节,我将此正则表达式与Cygwin的SED结合使用:
[^ \ x01- \ x7F]