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