除标签外,如何从标准输入中删除控制字符?

时间:2013-04-17 01:28:09

标签: perl bash

我想从标准输入中删除控制字符(如^ C,^ A等),并使用基本的bash,perl和其他一些linux工具将其打印到标准输出。

我现在做的是

(something) | sed 's/[[:cntrl:]]//g' | (something else)

到目前为止一直有效,但现在我发现它也删除了制表符,我想保留它们。

那么,还有其他的东西,只是工作吗?

3 个答案:

答案 0 :(得分:3)

来自Skip/remove non-ascii character with sed的第二个回答,我得到了这个有效的sed脚本

sed 's/[^[:print:]\t]//'g

它似乎有用(尽管“非ascii”部分是错误的,它不会删除任何unicode)。

要使Unicode正常工作,您必须将环境变量设置为LANG=en_US.UTF-8LC_CTYPE="en_US.UTF-8"(并导出)。

答案 1 :(得分:1)

您可以根据definition of [:cntrl:]

自行定义角色类
sed 's/[\x00\-\x08\x10-\x1F\x7F]\{1,\}//g'

答案 2 :(得分:1)

您可以使用perl-regex尝试ssedsuper-sed):

echo -e 'hello\tworld' | ssed 's/(?!\t)[[:cntrl:]]//g'