我有一个自由格式字符串,我需要在bash中进行清理,以便生成安全且漂亮的文件名。
示例:
STAGE_NAME="Some usafe name 2/2#"
预期的消毒结果"
"some-unsafe-name-2-2"
逻辑:
dash
(包括空格)只要它们是可移植的(不使用BSD / OSX /...上没有的选项),就允许使用像sed这样的外部工具。
答案 0 :(得分:6)
您可以使用此纯bash函数进行此清理:
sanitize() {
local s="${1?need a string}" # receive input in first argument
s="${s//[^[:alnum:]]/-}" # replace all non-alnum characters to -
s="${s//+(-)/-}" # convert multiple - to single -
s="${s/#-}" # remove - from start
s="${s/%-}" # remove - from end
echo "${s,,}" # convert to lowercase
}
然后将其称为:
sanitize "///Some usafe name 2/2##"
some-usafe-name-2-2
sanitize "Some usafe name 2/2#"
some-usafe-name-2-2
仅仅为了学术练习,awk
单行做同样的事情:
awk -F '[^[:alnum:]]+' -v OFS=- '{$0=tolower($0); $1=$1; gsub(/^-|-$/, "")} 1'