sed를 사용하고 지역 번호 301 다음에 209(3012093934, (301)2093935, (301)209-3936)가 붙은 전화번호가 포함된 텍스트 파일을 가져오는 스크립트를 작성하려고 합니다. 지역번호와 전화번호를 구분하는 공백, 대시, 괄호를 제거해야 합니다. 그런 다음 다른 파일에 올바른 번호를 써야 합니다. 올바른 번호는 지역 번호 301로 시작하고 그 뒤에 209와 정확히 4자리가 오는 것입니다.
그래서 내 정규식은 다음과 같지만 작동하지 않는 것 같습니다.
sed -n 's/(^301[\- ]*)/(209)/([0-9][0-9][0-9][0-9]$\)/p'
누구든지 도와줄 수 있나요? 미리 감사드립니다! ! !
답변1
숫자가 아닌 문자를 모두 제거한 다음 예상대로 시작하지 않는 줄을 제거하고 마지막으로 길이가 10자가 아닌 줄을 제거합니다.
sed -e 's/[^0-9]//g' -e '/^301209/!d' -e '/^.\{10\}$/!d'
답변2
먼저 다음을 tr
사용하여 원하지 않는 문자를 제거합니다 grep
.
tr -d '() -'|grep '301209[0-9][0-9][0-9][0-9]$'
답변3
sed -n 's/.*\(301\).*\(209\).*\([0-9]\{4\}\)/\1\2\3/w foobar'
이렇게 하면 숫자가 아닌 문자를 무시한 후 앞의 모든 문자 301
(예시 (309)
)와 0개 이상의 공백 발생 및 )
그 뒤의 공백이 정확히 4자리까지 제거됩니다. 출력은 에 기록됩니다 .301
209
foobar
답변4
sed -ne '/^ *\(+1\)\{0,1\} *(\{0,1\} *301 *)\{0,1\} *209 *-\{0,1\}\( *[0-9]\)\{4\} *$/s/[^0-9]*//gp'