我正在编写一个需要解析文件名的bash脚本.

它需要删除所有特殊字符(包括空格):"!?.-_,并将所有大写字母改为小写.比如:

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风格的换行符,我想这是您想要的.

第二种是将大写字符转换为小写.

Linux相关问答推荐

如何创建一堆文件中所有单词的列表?

从 MariaDB 连接到 Oracle 时出现错误消息libsqora.so.11.1:找不到文件

替换前 3 个字符范围内的所有整数

c++进程状态中的+是什么意思

有必要注意非错误提示吗?好像没有找到包裹‘***’?

如何拆分多个分隔符但将它们保留在方括号之间?

如何使用换行符或制表符或空格 grep 多行字符串

Dockerfile:无法复制文件

全屏(Fullscreen)小部件

从 Linux 到 Windows 交叉编译 C++ 应用程序的手册?

如何使用 AWK 合并两个文件?

是否可以在 Linux x86 GAS 程序集中创建没有系统调用的线程?

如何从 linux 的命令行将 Sublime Text 2 文件打开到选项卡,而不是新窗口

如何让 GNU 屏幕读取 .bash_profile/.bash_rc 更改?

如何搜索文件并将它们压缩到一个 zip 文件中

JAVA_HOME 和 PATH 已设置,但 java -version 仍显示旧版本

在 shell 脚本的 for 循环中迭代行而不是单词

编译 OpenGL 程序 GL/glew.h 缺失

linux脚本杀死java进程

Bash:等待超时