它将需要删除所有特殊字符(包括空格): “!?。_并将所有的大写字母改为小写,如下所示:
Some_randoM data1-A More Data0
至:
somerandomdata1a moredata0
我已经看到很多问题要在许多不同的编程语言中做到这一点,但不是在bash中。 有没有一个好的方法来做到这一点?
cat yourfile.txt | tr -dc '[:alnum:]\n\r' | tr '[:upper:]' '[:lower:]'
第一个tr
删除特殊字符。 d
表示删除, c
表示补足(反转字符集)。 所以, -dc
表示删除指定的所有字符。 \n
和\r
被包含来保存linux或windows样式的换行符,我假设你想要的。
第二个将大写字符转换为小写字母。
纯粹的bash解决方案:
$ filename='Some_randoM data1-A' $ f=${filename//[^[:alnum:]]/} $ echo "$f" SomerandoMdata1A $ echo "${f,,}" somerandomdata1a
这个功能:
clean() { local a=${1//[^[:alnum:]]/} echo "${a,,}" }
尝试一下:
$ clean "More Data0" moredata0
如果你使用mkelement0和Dan Bliss的方法。 你也可以看看sed + POSIX正则表达式。
cat yourfile.txt | sed 's/[^a-zA-Z0-9]//g'
sed匹配除了字母和数字以外的括号内的所有其他字符,并删除它们。
我用tr
删除了不属于[:print:]
类的任何字符
cat file.txt | tr -dc '[:print:]'
要么
echo "..." | tr -dc '[:print:]'
另外你可能想要|
(管道)输出到od -c
来确认结果
cat file.txt | tr -dc '[:print:]' | od -c