답변:
echo "$string" | tr xyz _
각각의 발생 대체 할 것이다 x
, y
또는 z
과를 _
주고, A__BC___DEF__LMN
당신의 예에.
echo "$string" | sed -r 's/[xyz]+/_/g'
의 반복 발생 대체 할 것이다 x
, y
또는 z
단일를 _
제공, A_BC_DEF_LMN
당신의 예에.
,[]{}()~
문자 가 포함 된 문자열이 있습니다 . '\'
원샷 으로 어떻게 처리 할 수 있습니까? 각 특수 문자로 대체하고 싶습니다 .
gsed
진 : $ brew install gnu-sed
다음$ gsed -r 's/[xyz]+/_/g'
sed -E
(기본적으로) sed -r
많은 Linux 배포판에서 (기본적으로) 동일 합니다. 사용하는 경우 sed 's/[xyz][xyz]*/_/g'
옵션이 필요하지 않습니다. 물론 이것은 tr -s xyz _
실제 필요가없는 것과 같습니다 sed
.
tr
. sed 's/[][{}()~,]/\\&/g'
그러나 실제로 후속 질문이 있으면 새로운 질문을하십시오 (물론 참조를 위해 여기로 다시 링크하십시오). 덧붙여, ,
그리고 ~
(비록 정규 표현식 메타 문자없는 ~
확장됩니다 $HOME
;하지 배쉬에 의해 약간의 위치와 일부 다른 셸 sh
그러나이).
사용 배쉬 매개 변수 확장을 :
orig="AxxBCyyyDEFzzLMN"
mod=${orig//[xyz]/_}
bash
. 다른 쉘은 작동하지 않을 수 있습니다 (일부는하지만).
sed
bash가 내장 대체를 사용하는 경우 왜 사용 합니까?
이 링크가 도움이 될 수 있습니다.
http://tldp.org/LDP/abs/html/string-manipulation.html
일반적으로
$ substring의 첫 번째 일치 항목을 $ replacement로 바꾸려면 다음을 수행하십시오.
${string/substring/replacement}
$ substring의 모든 일치 항목을 $ replacement로 바꾸려면 다음을 수행하십시오.
${string//substring/replacement}
편집 : 이것은 $ string 변수에 적용됩니다.
AxyzB
어떻습니까? 밑줄 세 개 또는 하나?