![sed를 사용하여 텍스트 범위를 특수 문자로 바꾸기](https://linux55.com/image/5558/sed%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%85%8D%EC%8A%A4%ED%8A%B8%20%EB%B2%94%EC%9C%84%EB%A5%BC%20%ED%8A%B9%EC%88%98%20%EB%AC%B8%EC%9E%90%EB%A1%9C%20%EB%B0%94%EA%BE%B8%EA%B8%B0.png)
특정 범위의 텍스트를 특수 문자가 포함된 sed로 바꾸려고 합니다.
다음과 같은 출력이 있습니다.
"Users" "/Users/Users" SERVER1
"Roaming Profiles" "/Roaming Profiles/Roaming Profiles" SERVER2
나는 이것이 다음과 같기를 원합니다 :
Users SERVER1
Roaming Profiles SERVER2
답변1
$ sed -r 's/"([^"]*)"([^"]*"){2}[[:space:]]*/\1 /' file
Users SERVER1
Roaming Profiles SERVER2
어떻게 작동하나요?
sed 교체 명령에는 다음과 같은 s/old/new/
형식의 정규 표현식이 있습니다.old
"([^"]*)"
-- 따옴표 안의 첫 번째 문자열과 일치하여 그룹 1에 저장됩니다.([^"]*"){2}
-- 두 번째로 인용된 문자열(이전 공백 포함)과 일치합니다.[[:space:]]*
-- 두 번째로 인용된 문자열 뒤의 공백과 일치합니다.
정규식은 new
간단합니다 \1
. 공백 뒤에 대괄호를 통해 첫 번째로 인용된 문자열이 옵니다. 이를 그룹 1에 저장합니다.
Mac OSX 또는 기타 BSD 플랫폼
OSX에서는 다음을 시도해 보세요.
sed -E 's/"([^"]*)"([^"]*"){2}[[:space:]]*/\1 /' file
답변2
awk를 사용하세요:
awk -F\" '{print $2,$5}' file