sed -E 's/([0-9]{3})-([0-9]{2})-([0-9]{4})/ /g' a.dat > b.dat
이것은 111-11-1111
공백으로 대체되지만 0111-11-1111
공백으로도 대체됩니다...하지만 무시하고 싶습니다. 0111-11-1111
(기본적으로 3이 아닌 4개의 숫자가 있는 경우)
답변1
추가 앵커 포인트가 필요합니다.
줄의 시작과 끝(각 항목이 한 줄에 있는 경우)
sed -E 's/^[0-9]{3}-[0-9]{2}-[0-9]{4}$/ /g' file
또는 단어 경계(공백-텍스트 변환)(GNU sed):
sed -E 's/\<[0-9]{3}-[0-9]{2}-[0-9]{4}\>/ /g' file
또는 캡처(및 반환)임의로 선택할 수 있는추가 문자. 그러나 이렇게 하려면 일치하는 모든 문자열을 추가 문자로 묶어야 합니다.
sed -E 's/([^0-9])[0-9]{3}-[0-9]{2}-[0-9]{4}([^0-9])/\1 \2/g' file
또는 (sed가 아닌) 정방향 및 역방향 조회를 허용하는 PCRE를 사용하십시오.
perl -pe '$_ =~ s/(?<!\d)\d{3}-\d{2}-\d{4}(?!\d)/ /g' file