[메모] 셸에서 정규식으로 찾기 바꾸기 하기

,

여러 줄에 걸친 정규식 찾기 바꾸기를 할 때 sed로 처리하는 것은 조금 복잡합니다.

Perl 정규 표현식을 사용하면 더 간단하게 처리할 수 있습니다. Perl의 -0777 옵션을 사용하면 전체 파일을 단일 문자열로 취급할 수 있어, 여러 줄에 걸친 패턴을 쉽게 매칭할 수 있습니다.

아래 명령을 참고해 보세요.

perl -i -0777 -pe 's/^author: by\n\n(.*)$/author: \1/m' "target-file.txt"

정규 표현식 ^author: by\n\n(.*)$는 ‘author: by’ 다음에 오는 두 개의 줄바꿈과 그 뒤에 오는 텍스트(이름)를 찾습니다.

m 옵션은 멀티라인 모드를 활성화하여 ^$가 각 줄의 시작과 끝에 매칭되도록 합니다.

author: \1에서 \1은 첫 번째 괄호 안에 들어있는 문자열을 뜻합니다.

-i 옵션

-i 옵션은 파일을 직접 수정하는 ‘in-place edit’ 모드를 활성화합니다. 일반적으로 Perl은 표준 출력으로 결과를 보내지만, -i 옵션을 사용하면 대신 원본 파일을 수정하게 됩니다. 이 옵션은 파일을 처리하고 원본 파일을 그대로 유지하려는 스크립트나 명령줄 작업에 유용합니다.

-i 옵션 뒤에 백업 확장자를 지정할 수도 있습니다. 예를 들어, -i.bak를 사용하면 원본 파일의 복사본이 .bak 확장자를 가진 새 파일로 저장됩니다. 이렇게 하면 원본 파일의 백업을 유지하면서 작업을 할 수 있어서, 만약 스크립트가 예상대로 작동하지 않을 때 원본 파일을 복구할 수 있습니다.

-pe 옵션

-p-e 옵션은 함께 사용되어 커맨드 라인에서 바로 하나 이상의 Perl 명령을 실행할 수 있게 해줍니다.

  • -p 옵션은 Perl이 각 입력 라인을 처리한 후에 자동으로 그 결과를 출력하도록 합니다. 즉, 이 옵션은 입력된 각 줄에 대해 제공된 Perl 코드를 실행하고, 그 결과를 표준 출력으로 보내는 루프를 생성합니다. 이는 텍스트 파일의 각 줄을 순차적으로 처리하고 싶을 때 유용합니다.
  • -e 옵션은 실행할 Perl 코드를 지정합니다. 이 옵션 뒤에는 직접 Perl 코드를 작성합니다. 이렇게 하면 별도의 스크립트 파일을 작성하지 않고도 명령줄에서 직접 Perl 코드를 실행할 수 있습니다.

-pe 조합은 주로 텍스트 처리에서 많이 사용됩니다. 이 옵션들을 사용하면 파일의 각 줄에 대해 주어진 Perl 코드를 실행하고, 그 결과를 바로 출력하거나 (-i 옵션과 함께 사용할 경우) 파일에 직접 반영할 수 있습니다. 예를 들어, 파일의 각 줄에 특정 문자를 추가하거나, 정규 표현식에 맞는 부분을 찾아 수정하는 등의 작업을 할 때 매우 유용합니다.

(이상은 ChatGPT와의 대화 내용을 제가 살짝 손본 것입니다.)

👇 카테고리 글 목록

,

대표글

댓글 남기기