该命令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 -i
或sed -i ''
取决于实施。但请确保首先生成正确的输出,否则可能会破坏数据。