이름과 함께 변경해야 memberUid
하는 아래와 같은 일부 항목이 있는 테스트 파일이 있습니다.nisNetgroupTriple
$ cat testfile2
memberUid: tony
memberUid: jacob
memberUid: zenny
memberUid: helori
memberUid: honies
memberUid: hunter
하지만 memberUid
unix like를 사용하여 변경할 수 있고 like를 사용하여 다시 변경할 수 있지만 어느 쪽이든 프로세스가 더 우아하게 수행될 수 있지만 아직 이해가 되지 않습니다.nisNetgroupTriple
sed
%s/memberUid/nisNetgroupTriple/g
awk
awk '{print $1, "(-,"$2",)"}' testfile2
원하는 출력:
nisNetgroupTriple: (-,tony,)
nisNetgroupTriple: (-,jacob,)
답변1
이 시도:
sed -r 's/^memberUid: (.*)/nisNetgroupTriple: (-,\1,)/' testfile2
nisNetgroupTriple: (-,tony,)
nisNetgroupTriple: (-,jacob,)
nisNetgroupTriple: (-,zenny,)
nisNetgroupTriple: (-,helori,)
nisNetgroupTriple: (-,honies,)
nisNetgroupTriple: (-,hunter,)
sed를 검색, 교체 및 캡처 그룹과 함께 사용하세요 (.*)
. 대체 문자열에서는 원하는 형식을 작성하고 \1
대괄호 안에 캡처된 내용을 채웁니다.
답변2
Python3을 사용하여 답변을 찾는 동안 Python 정규 표현식을 사용한 답변은 다음과 같습니다.
import re
f = open(testfile2).read()
re.sub(r'(memberUid)(\:\s)(\w+)',r'nisNetgroupTriple\2(-,\3,)',f)
설명하다:
re
re.sub
다음과 같이 제공된 문자열의 패턴을 다른 패턴으로 바꾸는 Python의 정규식 모듈에서 제공하는 메서드입니다 .re.sub(r'original-pattern', r'replacement-pattern', inputString)
- 패턴에 사용된 괄호는 캡처의 그룹에 사용됩니다.원래 패턴. 예를 들어, 우리의 경우에는
memberUid
,:\s
및 3개의 그룹을 캡처했습니다\w+
. 그런 다음 대체 패턴(예: 등)에서 이러한 그룹을 참조할 수\1
있습니다\2
.
답변3
각 입력 라인의 첫 번째 부분은 항상 대체되므로 이는 sed
중복됩니다 . 당신에게 필요한 것은
awk '{print "nisNetgroupTriple: (-,"$2",)"}'