我有一个命令来替换文件中的不可打印字符和单引号,但执行起来需要更多时间,因为我正在为多个文件替换这些字符,并且文件大小约为 30GB。
LANG=iso-8859-1 sed -i 's/[^[:print:]]//g;s/'\''//g;s/'//g' $path/EID*_$1.xml
和传递参数$path
。$1
如何使进程运行得更快?还有其他可以使用的命令吗?我听说tr
命令比 更快,sed
但我如何tr
在我的情况下使用该命令。 (tr
所有文件的单行命令)。
我尝试了这个命令:
LANG=iso-8859-1 sed 's/[^[:print:]]//g;s/'\''//g;s/'//g' < $path/EID123_$1.xml > $path/EID123_$1_new.xml
mv -f $path/EID123_$1_new.xml EID123_$1.xml
LANG=iso-8859-1 sed 's/[^[:print:]]//g;s/'\''//g;s/'//g' < $path/EID456_$1.xml > $path/EID456_$1_new.xml;
mv -f $path/EID456_$1_new.xml EID456_$1.xml
对于每个没有 i 选项的单个文件,但它没有给出预期的结果,我仍然可以看到文件中的不可打印字符。
答案1
输入二进制文件富,对于任何不可打印的字符(或某种空格),用空格替换该字符,并将输出发送到管道,其中另一个t将单引号替换为空格,然后输出到酒吧。
tr --complement '[:print:]' ' ' < foo | tr "'" ' ' > bar