我有一个自由格式的字符串,我需要在 bash 中对其进行清理,以生成安全且美观的文件名。
例子:
STAGE_NAME="Some usafe name 2/2#"
预期的 sanitizer 结果“
"some-unsafe-name-2-2"
逻辑:
- 小写字符
- 将所有不受支持或不安全的字符替换为
dash
(包括空格) - 删除重复的破折号
- 从前缀或后缀中删除任何破折号
允许使用像 sed 这样的外部工具,只要它们是可移植的(不使用 BSD/OSX/... 上不可用的选项)。
最佳答案
您可以使用这个纯 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'
关于bash - 如何清理 bash 中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44810685/