Remove all special characters and case from string in bash
我正在编写一个需要解析文件名的bash脚本。
它将需要删除所有特殊字符(包括空格):"!?.-并将所有大写字母改为小写。像这样:
1 2 | Some_randoM data1-A More Data0 |
到:
1 2 | somerandomdata1a moredata0 |
我在许多不同的编程语言中看到了很多这样做的问题,但在bash中没有。有什么好办法吗?
1 2 3 | cat yourfile.txt | tr -dc '[:alnum:] ' | tr '[:upper:]' '[:lower:]' |
第一
第二个translates到lowercase uppercase字符。
解决方案:4 +纯巴什
1 2 3 4 5 6 | $ filename='Some_randoM data1-A' $ f=${filename//[^[:alnum:]]/} $ echo"$f" SomerandoMdata1A $ echo"${f,,}" somerandomdata1a |
这个函数是:
1 2 3 4 | clean() { local a=${1//[^[:alnum:]]/} echo"${a,,}" } |
尝试它。
1 2 | $ clean"More Data0" moredata0 |
我用
1 | cat file.txt | tr -dc '[:print:]' |
或
1 | echo"..." | tr -dc '[:print:]' |
以及如何你可能想
1 | cat file.txt | tr -dc '[:print:]' | od -c |
如果你是用mkelement0丹和幸福的方法。你也可以寻找到POSIX正则表达式sed +。
1 | cat yourfile.txt | sed 's/[^a-zA-Z0-9]//g' |
所有其他字符的SED的比赛没有包含在除了字母和数字的东西和删除它们。