sed $'s/[^[:print:]\t]//g' 有什么作用?

Viv*_*Viv 1 grep sed shell-script

该命令sed $'s/[^[:print:]\t]//g'按原样打印我的 .txt 的每一行。

它是干什么用的?我在谷歌上找不到它。

例如:

    sed $'s/[^[:print:]\t]//g' *.txt | wc -l
    15909

    cat *.txt | wc -l
    15909
Run Code Online (Sandbox Code Playgroud)

没有对文件进行任何编辑。这个命令有什么作用

Kus*_*nda 8

sed命令从每行输入的内容中删除任何不可打印的字符,而不是制表符。行数不会改变(换行符不会被删除,因为它们不是行内容的一部分),但字符或字节数可能会改变。再次测试wc -c字节wc -m数和字符数。

正则表达式[^...]匹配任何单个字符(实际上排序元素中的[...]。在这种情况下,它是字符类[:print:]和制表符。将$在字符串品牌开始bash取代\t之前调用与文字制表符sed

字符类[:print:]匹配可在当前语言环境中打印的字符,即字母数字字符、标点字符和空格(但不是制表符,它是控制字符)。

换句话说,它会删除不是字母数字字符、标点字符、空格或制表符的所有内容。

要将结果写回文件(“就地编辑”),一些sed实现有一个-i选项;使用sed -ised -i ''取决于实现。但是请确保首先生成正确的输出,否则您可能会破坏您的数据。

  • @Viv 时间戳未更改,因为未对文件进行更改。唯一发生的事情是这些行被转换并打印到终端。 (2认同)
  • @Viv 删除 `[^...]` 中的 `^` 以查看哪些字符与逆条件匹配。 (2认同)
  • @Viv `grep -H $'[^[:print:]\t]' *.txt`,可能。 (2认同)