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

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

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

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

例如:

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

    cat *.txt | wc -l
    15909

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

答案1

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

正则表达式[^...]匹配任何单个字符 (实际上整理元素不是[...]。在本例中,它是字符类[:print:]和制表符。$字符串开头的 会在调用之前bash替换\t为文字制表符sed

字符类[:print:]匹配当前区域设置中可打印的字符,即字母数字字符、标点符号字符和空格(但不包括作为控制字符的制表符)。

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

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

相关内容