0

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

我现在做的是

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

直到现在都有效,但现在我发现它也删除了制表符,我想保留它们。

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

4

3 回答 3

3

用 sed 修改 Skip/remove non-ascii 字符的第二个答案,我得到了这个工作 sed 脚本

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

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

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

于 2013-04-17T01:46:28.017 回答
1

您可以根据以下定义[:cntrl:]自己定义字符类:

sed 's/[\x00\-\x08\x10-\x1F\x7F]\{1,\}//g'
于 2013-04-17T01:34:59.030 回答
1

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

echo -e 'hello\tworld' | ssed 's/(?!\t)[[:cntrl:]]//g'
于 2013-04-17T01:36:27.943 回答