![用于提高性能的 sed 命令或用于相同性能的 tr 命令](https://linux22.com/image/83337/%E7%94%A8%E4%BA%8E%E6%8F%90%E9%AB%98%E6%80%A7%E8%83%BD%E7%9A%84%20sed%20%E5%91%BD%E4%BB%A4%E6%88%96%E7%94%A8%E4%BA%8E%E7%9B%B8%E5%90%8C%E6%80%A7%E8%83%BD%E7%9A%84%20tr%20%E5%91%BD%E4%BB%A4.png)
我有一个命令来替换文件中的不可打印字符和单引号,但执行起来需要更多时间,因为我正在为多个文件替换这些字符,并且文件大小约为 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