入力例:
test_replace.test_json
予想出力:
test-replace
現在のコード:
sed -e 's/_/-/g'
現在の出力:
test-replace.test-json
どんな助けでも大変感謝します! !
答え1
私は2つのステップを使います:1)最初の点とその後のすべての点を削除します。 2) 残りの下線を置き換えます。
sed 's/\..*//; s/_/-/g'
答え2
文字列がシェル変数にあると仮定するか、シェルをname
使用しているとします。bash
zsh
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}
すべての発生を)シェル(および少なくともシェル)がサポートする拡張に置き換えます。pattern
replacement
bash
zsh