파일 내부의 텍스트를 하나의 명령으로 바꾸기 : perl

때때로 파일 내의 텍스트를 바꾸고 싶을 때가 있습니다. 예를 들어 Document.txt 파일 에서 "my family"를 "us"로 모두 바꾸는 것처럼 말이죠. 이를 위해 선호하는 텍스트 편집기(Kate, Gedit, Sublime Text 등)를 사용할 수 있지만, 같은 결과를 얻을 수 있는 다른 방법들을 알아두는 것도 좋습니다.

알고 보니 정규 표현식을 사용하면 이것이 가능합니다. `sed` 명령어는 정말 훌륭하고 무궁무진한 변형과 ​​옵션을 제공하지만… 최대한 간단하게 텍스트를 바꾸고 싶은 분들을 위해 훨씬 더 간단한 방법을 소개합니다.

예시를 따라 $HOME/Document.txt 경로에 다음과 같은 내용이 담긴 Document.txt 파일이 있다고 가정해 보겠습니다.

우리 가족은 다른 가족들과 다를 바 없어요. 당신 가족이나 당신 이웃 가족처럼요. 사실, 우리 가족은 사회적으로 올바른, 사회적으로 책임감 있는 사람들이 되려고 노력해요. 하지만 우리 집에는 문제아가 한 명 있는데, 그게 바로 저예요. 하하! 저는 항상 (사회적으로 용납되지 않더라도) 제 생각을 말하는 걸 두려워하지 않았어요. 사실, 우리 가족은 오늘날 엉망진창인 사회에 진저리가 나 있는답니다.

다음 명령어를 실행하면 " my family "가 " us "로 변경됩니다.

perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt

참 간단해요 

따라서 텍스트는 다음과 같습니다.

(…) 우리 가족도 다른 가족들과 똑같아요. 당신 가족이나 당신 이웃 가족처럼요. 사실, 우리는 사회의 시선에 부합하는 책임감 있는 사람, 정치적으로나 사회적으로 올바른 사람이 되려고 노력해요. 하지만 우리 집에는 문제아가 하나 있는데, 그게 바로 제 역할이에요, 하하! 저는 항상 제 생각을 말하는 걸 두려워하지 않았어요 (비록 사회의 시선에 맞지 않더라도요). 사실 우리 가족은 오늘날 사회의 추악함 에 진저리가 나 있지만요.

구문은 다음과 같습니다.

perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar

명령어가 조금 복잡해 보일 수 있으니, 좀 더 분해해서 좀 더 간단하게 설명해 보겠습니다 

  • 펄 : 우리가 사용할 것, 펄
  • -파이 : Pí, 어떻게 π (3.14의 근사값)
  • -e : E는«e가 실행된다»를 상상합니다. ^ - ^
  • 그런 다음 따옴표로 » 우리는 s 그리고 우리는 g : "sg" ...시작을 의미하는 S와 게임 종료를 의미하는 G를 상상해 보세요 
  • 사이를 돌려 sg 두 세트의 괄호를 넣어야합니다. [] y [], 그런 식으로 : "S [] [] g"
  • 위에서 말했듯이 첫 번째 대괄호 안에는 제거하고 새 텍스트로 바꾸려는 텍스트가 표시되고 두 번째 대괄호 집합에는 예제에 따라 넣을 새 텍스트가 표시됩니다. "S [우리 가족] [우리] g"

간단하지 않습니까?

실제로 설명은 명령에 필요한 것보다 훨씬 길지만 이해하기 매우 쉽습니다 

Perl은 텍스트를 대체하는 방법 그 이상이며 전체 언어입니다 

더 자세히 알고 싶다면 perl-doc 패키지를 설치 하고 모든 기능을 살펴보세요. 완전히 다른 세상이 펼쳐질 겁니다.

그건 그렇고 닫으려면 $ HOME / Documents /에있는 모든 .txt 파일을 찾고 각 파일에서 "my family"를 "us"로 바꾸고 싶다면 find + perl에 가입하여 다음을 수행 할 수 있습니다.

find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;

또는 와일드 카드 사용 :

perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt

이 두 번째 변종의 문제점은 하위 폴더에 있는 파일을 대체하지 않는다는 것입니다. 

어쨌든, 당신이 흥미로웠기를 바랍니다. 저에게는 정말 유용했습니다. 이제 터미널에서 직접 텍스트를 바꿀 수 있습니다... 훌륭합니다! 


Google에서 선호하는 검색 엔진으로 추가