Linux 删除除制表符以外的ctrl字符
我有一个制表符分隔的文件,其中有许多垃圾cntrl字符。我想删除除tab(即^I)之外的控制字符。因此,我需要一个POSIX正则表达式,它可以识别不包括制表符的控制字符。试试看Linux 删除除制表符以外的ctrl字符,linux,bash,sed,awk,Linux,Bash,Sed,Awk,我有一个制表符分隔的文件,其中有许多垃圾cntrl字符。我想删除除tab(即^I)之外的控制字符。因此,我需要一个POSIX正则表达式,它可以识别不包括制表符的控制字符。试试看 tr -Cd '[:print:]\n\t' < file tr-Cd'[:print:][\n\t'
tr -Cd '[:print:]\n\t' < file
tr-Cd'[:print:][\n\t'
这将只打印可打印字符、换行符和
\t
实例。您可以使用tr
:
tr -d '\000-\010\013-\037' < inputfile
tr-d'\000-\010\013-\037'\008
会更好,因为\010
8不是八进制数字!010是十进制8.+1,用于显示如何使用八进制编码字符的范围。@devnull:Re-C
与-C
:我从未理解-C
和-C
之间概念上的区别-实际上,它们似乎都是这样做的。例如,GNUtr
s命令行帮助将它们简单地列为同义词。POSIX规范()区分了字符(-C
)和值(-C
),但没有解释“值”是什么。你能解释一下区别吗?只是-c
看起来更标准。在BSD上,-C
会给出一个错误。@devnull:经过一些挖掘()我得出结论:-C
是区域设置感知的(支持多字节字符),因此更可取<代码>-c
,相反,它是以字节为单位操作的<代码>-C
自POSIX:2001(SUSv3)以来一直是POSIX的一部分。当你说BSD时,我想你指的是类似BSD的平台;FreeBSD和OSX都支持-C
-您知道有哪些不支持的吗?