sed 正则表达式不适用于隐藏字符

sed 正则表达式不适用于隐藏字符

我有一个列表,由于某种原因,末尾附加了一些非字母数字字符。

我本以为这将是一个简单的运行案例:

sed 's/[^A-Za-z0-9]$//'

替换这些尾随字符。不幸的是,上述似乎效果为零。

例如,如果我对文件进行十六进制转储,我将看到如下行:

63 6f 6d be 0a 

显然,这里的罪魁祸首是十六进制字符

be

但运行以下管道

.... | sed 's/[^A-Za-z0-9]//' | hexdump -C

我仍然看到“be”出现!

答案1

您可以使用 ; 过滤掉不需要的字符tr。在你的情况下

... | tr -d -c '[:print:][:cntrl:]'

-d删除与指定字符匹配的任何字符,-c补充字符集(因此它仅保留在本例中匹配的内容),[:print:]匹配所有可打印字符(包括空格),并[:cntrl:]匹配控制字符(例如您可能想要保留的回车符和换行符) 。

相关内容