我想从标准输入中删除控制字符(如^ C,^ A等),并使用基本的bash,perl和其他一些linux工具将其打印到标准输出。
我现在做的是
(something) | sed 's/[[:cntrl:]]//g' | (something else)
到目前为止一直有效,但现在我发现它也删除了制表符,我想保留它们。
那么,还有其他的东西,只是工作吗?
答案 0 :(得分:3)
来自Skip/remove non-ascii character with sed的第二个回答,我得到了这个有效的sed脚本
sed 's/[^[:print:]\t]//'g
它似乎有用(尽管“非ascii”部分是错误的,它不会删除任何unicode)。
要使Unicode正常工作,您必须将环境变量设置为LANG=en_US.UTF-8
和LC_CTYPE="en_US.UTF-8"
(并导出)。
答案 1 :(得分:1)
您可以根据definition of [:cntrl:]
:
sed 's/[\x00\-\x08\x10-\x1F\x7F]\{1,\}//g'
答案 2 :(得分:1)
您可以使用perl-regex尝试ssed
(super-sed):
echo -e 'hello\tworld' | ssed 's/(?!\t)[[:cntrl:]]//g'