이 예제는 sed를 사용할 필요없이 bash에서도 작동합니다.
#!/bin/bash
MYVAR=ho02123ware38384you443d34o3434ingtod38384day
MYVAR=${MYVAR//[a-zA-Z]/X}
echo ${MYVAR//[0-9]/N}
문자 클래스 대괄호 표현식을 사용할 수도 있습니다.
#!/bin/bash
MYVAR=ho02123ware38384you443d34o3434ingtod38384day
MYVAR=${MYVAR//[[:alpha:]]/X}
echo ${MYVAR//[[:digit:]]/N}
산출
XXNNNNNXXXXNNNNNXXXNNNXNNXNNNNXXXXXXNNNNNXXX
그러나 @Lanaru가 알고 싶었던 것은 내가 질문을 올바르게 이해했다면 "전체"또는 PCRE 확장이 왜 필요한지입니다. \s\S\w\W\d\D
등이 php ruby python 등에서 지원 작동하지 않는 . 이러한 확장은 Perl 호환 정규식 (PCRE)에서 가져온 것입니다. 다른 형태의 쉘 기반 정규식과 호환되지 않을 수 있습니다.
작동하지 않습니다.
#!/bin/bash
hello=ho02123ware38384you443d34o3434ingtod38384day
echo ${hello//\d/}
hello=ho02123ware38384you443d34o3434ingtod38384day
echo $hello | sed 's/\d//g'
모든 리터럴 "d"문자가 제거 된 출력
ho02123ware38384you44334o3434ingto38384ay
하지만 다음은 예상대로 작동합니다.
#!/bin/bash
hello=ho02123ware38384you443d34o3434ingtod38384day
echo $hello | perl -pe 's/\d//g'
산출
howareyoudoingtodday
좀 더 명확 해지기를 바라지 만 아직 혼란스럽지 않다면 REG_ENHANCED 플래그가 활성화 된 Mac OS X에서이 작업을 시도해보십시오.
#!/bin/bash
MYVAR=ho02123ware38384you443d34o3434ingtod38384day;
echo $MYVAR | grep -o -E '\d'
대부분의 * nix 버전에서는 다음 출력 만 표시됩니다.
d
d
d
nJoy!