정규식 일치 항목을 일치 항목이 포함된 문자열로 바꿉니다.

정규식 일치 항목을 일치 항목이 포함된 문자열로 바꿉니다.

텍스트가 포함된 파일이 있습니다.

Afghanistan=+93
Albania=+355
Algeria=+213
American Samoa=+1
Andorra=+376
Angola=+244

여기에는 모든 국가 및 해당 국가의 전화 걸기 코드 목록이 포함되어 있습니다.

교체하고 싶은 항목:

Afghanistan=+93그리고Afghanistan(+93)=+93

선택 패턴을 으로 얻을 수 있지만 =\+[0-9]*대체 패턴 문자열은 무엇입니까?

나는 \1이것이 선택 일치를 캡처하고 있다는 것을 알고 있지만 작동하지 않는 것 같습니다 sed. 따라서 정규식에는 선택이 필요합니다.

sed나 다른 UNIX 도구를 사용하여 이 작업을 어떻게 수행할 수 있나요?

답변1

sed 's/=\(+[0-9]\{1,3\}\)/(\1)=\1/' 

문제를 해결하려면(내가 아는 한):

기억해야 하는 패턴은 sed괄호로 묶어야 합니다. 패턴의 모양은 인덱스 번호를 정의합니다. 예를 들어:

sed 's/\(<memorized_pattern_1>\)<not_memorized>\(<memorized_pattern_2>\)/\2\1/'

패턴 1과 2가 바뀌고 그 사이의 패턴이 삭제됩니다.

답변2

sed 's/=\([^= ]*\) *$/(\1)&/' <in >out

위 코드는 한 줄의 마지막 등호와 그 뒤의 모든 문자만 대체합니다.

  1. 사본아니요두 개의 괄호로 둘러싸인 공간(줄에 공백이 있는 경우)

  2. 전체 일치 패턴이 다시 나타납니다.

오른쪽에(대체를 위한 교체 필드 s///) \1첫 번째 \(그룹 캡처를 \)나타내며 &전체 일치 패턴을 그룹으로 나타냅니다. 그래서...

sed 's/=\([^= ]*\) *$/(\1)&/' <<\IN
    Afghanistan=+93
    Albania=+355
    Algeria=+213
    American Samoa=+1
    Andorra=+376
    Angola=+244
IN

    Afghanistan(+93)=+93
    Albania(+355)=+355
    Algeria(+213)=+213
    American Samoa(+1)=+1
    Andorra(+376)=+376
    Angola(+244)=+244

답변3

다음을 사용하세요.

sed 's/=\(+[0-9]\+\)/(\1)=\1/' file

문자열 뒤에 =+최소한 하나의 숫자( [0-9]\+)가 오는 것을 검색하고 (\1)=\1모든 숫자를 필요한 형식( )으로 바꿉니다.

답변4

모든 데이터가 file이라는 파일에 있다고 가정하면

     awk -F "=" '{print $1"("$2")="$2}' file

관련 정보