텍스트가 포함된 파일이 있습니다.
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
위 코드는 한 줄의 마지막 등호와 그 뒤의 모든 문자만 대체합니다.
사본아니요두 개의 괄호로 둘러싸인 공간(줄에 공백이 있는 경우)
전체 일치 패턴이 다시 나타납니다.
오른쪽에(대체를 위한 교체 필드 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