sed를 사용하여 텍스트 범위를 특수 문자로 바꾸기

sed를 사용하여 텍스트 범위를 특수 문자로 바꾸기

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

관련 정보