특정 범위의 텍스트를 특수 문자가 포함된 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