输入示例:
test_replace.test_json
预期输出:
test-replace
当前代码:
sed -e 's/_/-/g'
电流输出:
test-replace.test-json
任何援助将不胜感激!!
答案1
我会使用两个步骤:1)删除第一个点和后面的所有内容; 2)替换剩下的下划线
sed 's/\..*//; s/_/-/g'
答案2
假设字符串保存在 shell 变量 中,name
并假设您使用的是bash
or zsh
shell:
name=${name%.*} # remove everything after the last dot
name=${name//_/-} # change all underscores to dashes
您是否想要保留上面第一个分配删除的扩展名:
ext=${name##*.} # remove everything up to the last dot
name=${name%.*} # remove everything after the last dot
name=${name//_/-} # change all underscores to dashes
name=$name.$ext # re-attach extension
或者,通过按其他顺序执行操作来稍微缩短:
ext=${name##*.} # remove everything up to the last dot
name=${name//_/-} # change all underscores to dashes
name=${name%.*}.$ext # remove (possibly modified) extension and attach original extension
${variable%pattern}
(删除最短匹配后缀)和${variable##pattern}
(删除最长匹配前缀)都是标准变量扩展。 (将${variable//pattern/replacement}
的每个匹配项替换为 ) 是shell (以及至少shell)支持的扩展。pattern
replacement
bash
zsh