입력 예:
test_replace.test_json
예상 출력:
test-replace
현재 코드:
sed -e 's/_/-/g'
현재 출력:
test-replace.test-json
어떤 도움이라도 대단히 감사하겠습니다! !
답변1
나는 두 단계를 사용합니다: 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