正则表达式查找并用下划线替换特殊字符
Regex find and replace special chars with underscore
我很抱歉,因为我知道这个问题已经被问过很多次了。但是,我找不到适合我的答案!似乎大多数答案似乎都是用特定的语言设计的,例如 Java 或 php。我试图在终端 (mac) 行以“纯”正则表达式格式进行这项工作。这段代码有效,但我想找到特殊字符并替换为下划线。就像现在一样,正则表达式什么都没有替换。知道如何指定替换值吗?
find . -type f|while read f;do b=${f##*/};mv "$f" "${f%/*}/${b//[^[:alnum:]_.]}";done
您可以指定更换一个/
:
"${f%/*}/${b//[^[:alnum:]_.]/_}"
# ↑↑
此处,${b//[^[:alnum:]_.]/_}
表示除字母、数字、下划线和点之外的任何单个字符将被替换为 _
个字符。
如果您需要用单个下划线替换一个或多个特殊字符的块,请使用
shopt -s extglob
"${f%/*}/${b//+([^[:alnum:]_.])/_}"
shopt -u extglob
我很抱歉,因为我知道这个问题已经被问过很多次了。但是,我找不到适合我的答案!似乎大多数答案似乎都是用特定的语言设计的,例如 Java 或 php。我试图在终端 (mac) 行以“纯”正则表达式格式进行这项工作。这段代码有效,但我想找到特殊字符并替换为下划线。就像现在一样,正则表达式什么都没有替换。知道如何指定替换值吗?
find . -type f|while read f;do b=${f##*/};mv "$f" "${f%/*}/${b//[^[:alnum:]_.]}";done
您可以指定更换一个/
:
"${f%/*}/${b//[^[:alnum:]_.]/_}"
# ↑↑
此处,${b//[^[:alnum:]_.]/_}
表示除字母、数字、下划线和点之外的任何单个字符将被替换为 _
个字符。
如果您需要用单个下划线替换一个或多个特殊字符的块,请使用
shopt -s extglob
"${f%/*}/${b//+([^[:alnum:]_.])/_}"
shopt -u extglob