我有一个列表,由于某种原因,末尾附加了一些非字母数字字符。
我本以为这将是一个简单的运行案例:
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:]
匹配控制字符(例如您可能想要保留的回车符和换行符) 。