일부 표현을 생략하려면 SED 도움이 필요합니다.

일부 표현을 생략하려면 SED 도움이 필요합니다.
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

추가 앵커 포인트가 필요합니다.

  1. 줄의 시작과 끝(각 항목이 한 줄에 있는 경우)

    sed -E 's/^[0-9]{3}-[0-9]{2}-[0-9]{4}$/ /g' file
    
  2. 또는 단어 경계(공백-텍스트 변환)(GNU sed):

    sed -E 's/\<[0-9]{3}-[0-9]{2}-[0-9]{4}\>/ /g' file
    
  3. 또는 캡처(및 반환)임의로 선택할 수 있는추가 문자. 그러나 이렇게 하려면 일치하는 모든 문자열을 추가 문자로 묶어야 합니다.

    sed -E 's/([^0-9])[0-9]{3}-[0-9]{2}-[0-9]{4}([^0-9])/\1 \2/g' file
    
  4. 또는 (sed가 아닌) 정방향 및 역방향 조회를 허용하는 PCRE를 사용하십시오.

    perl -pe '$_ =~ s/(?<!\d)\d{3}-\d{2}-\d{4}(?!\d)/ /g' file
    

관련 정보