python3에서 파일의 여러 문자열 바꾸기

python3에서 파일의 여러 문자열 바꾸기

이름과 함께 변경해야 memberUid하는 아래와 같은 일부 항목이 있는 테스트 파일이 있습니다.nisNetgroupTriple

$ cat testfile2
memberUid: tony
memberUid: jacob
memberUid: zenny
memberUid: helori
memberUid: honies
memberUid: hunter

하지만 memberUidunix like를 사용하여 변경할 수 있고 like를 사용하여 다시 변경할 수 있지만 어느 쪽이든 프로세스가 더 우아하게 수행될 수 있지만 아직 이해가 되지 않습니다.nisNetgroupTriplesed%s/memberUid/nisNetgroupTriple/gawkawk '{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)

설명하다:

  • rere.sub다음과 같이 제공된 문자열의 패턴을 다른 패턴으로 바꾸는 Python의 정규식 모듈에서 제공하는 메서드입니다 .
    • re.sub(r'original-pattern', r'replacement-pattern', inputString)
  • 패턴에 사용된 괄호는 캡처의 그룹에 사용됩니다.원래 패턴. 예를 들어, 우리의 경우에는 memberUid, :\s및 3개의 그룹을 캡처했습니다 \w+. 그런 다음 대체 패턴(예: 등)에서 이러한 그룹을 참조할 수 \1있습니다 \2 .

답변3

각 입력 라인의 첫 번째 부분은 항상 대체되므로 이는 sed중복됩니다 . 당신에게 필요한 것은

awk '{print "nisNetgroupTriple: (-,"$2",)"}'

관련 정보