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

특정 경우에 파일 내의 텍스트를 바꾸고 싶습니다. 예를 들어 Document.txt "우리 가족"이 "우리"에 대해 말하는 모든 것. 이를 위해 선호하는 텍스트 편집기 (Kate, Gedit, SublimeText 등)를 사용할 수 있지만 동일한 결과를 얻을 수있는 다른 방법과 변형을 아는 것이 항상 좋습니다.

그것은 정규식 이것은 달성 할 수 있습니다. sed 명령은 단순히 훌륭합니다. 끝없는 변형과 옵션이 있지만 ... 가능한 가장 덜 복잡한 방법, 그들에게는 훨씬 더 간단한 변형을 가져 왔습니다.

예제에 따라 우리는 Document.txt 에 위치 $ 홈 / Document.txt 다음 텍스트로 :

(...) 내 가족 그것은 당신이나 당신 이웃의 그들 모두와 같습니다. 사실로 내 가족 우리는 책임감있는 사람이되고 사회의 눈에 정치적으로나 사회적으로 옳도록 노력합니다. 하지만 우리 집에는 흑양이 있는데 그게 내 역할 LOL !. 나는 항상 그가 생각하는 것을 말하는 것을 두려워하지 않는 사람이었습니다 (사회의 눈에는 옳지 않더라도), 실제로 우리 가족은 더러운 오늘날의 사회.

다음 명령을 사용하여«내 가족"by"우리":

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

간단합니다 🙂

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

(...) 우리 그것은 당신이나 당신 이웃의 그들 모두와 같습니다. 사실로 우리 우리는 책임감있는 사람이되고 사회의 눈에 정치적으로나 사회적으로 옳도록 노력합니다. 하지만 우리 집에는 흑양이 있는데 그게 내 역할 LOL !. 나는 항상 그가 생각하는 것을 말하는 것을 두려워하지 않는 사람이었습니다 (사회의 눈에는 옳지 않더라도), 실제로 우리 가족은 더러운 오늘날의 사회.

구문은 다음과 같습니다.

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 그리고 그것이 허용하는 것을 whooodo 살펴보십시오. 그것은 단지 다른 우주입니다.

그건 그렇고 닫으려면 $ 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

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

어쨌든 흥미 로웠기를 바랍니다. 저에게는 정말 유용했습니다. 이미 터미널에서 직접 텍스트를 바꿀 수 있습니다. 😀


21 코멘트, 당신의 것을 남겨주세요

코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자 : Miguel Ángel Gatón
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.

  1.   붐 슈퍼소닉

    글쎄, 여기 많은 사람들이 sed 명령을 알고 있다고 생각합니다.이 명령은 동일한 용도로 사용되며 훨씬 더 잘하고 사용하기 쉽습니다 ...

    1.    KZKG ^ 가아라

      의견 주셔서 감사합니다.
      두 가지 세부 사항, 왜 sed가 더 나아 진다고 말합니까? 너무 많은 '이상한'캐릭터와 함께 사용하는 것이 정말 더 쉬운가요?

  2.   페데리코 A. 발데스 투자 그

    모두에게 인사 !!!. 나는 명령을 사용했다 SED이며 여기에 설명 된 perl 방법이 더 간단합니다. 감사합니다 KZKG ^ Gaara !!!.

    1.    KZKG ^ 가아라

      댓글 주셔서 감사합니다 🙂
      글쎄, 적어도 이것은 정규 표현식보다 더 간단한 것 같습니다 ... 너무 많은 '이상한'문자를 사용하면 이해하고 배우기가 정말 복잡한 일이 익숙하지 않은 사람도 할 수 있습니다.

      1.    Giskard

        "오래된"격언이 있습니다.«문제가 생겼습니다. 정규 표현식을 사용하기로 결정했습니다 ... 이제 두 가지 문제가 있습니다»😉

        1.    KZKG ^ 가아라

          하 하하하 하하하!
          정규 표현식은 특정 시점에서 우리의 생명을 구할 수 있습니다. 예, 사용 방법을 배우는 데 오랜 시간이 걸립니다.

          내가 몇 년 전에이 명령을 알고 있었다면, 하나님 !! 내 인생이 얼마나 단순했을까요 😀

          1.    Giskard

            확실한! 잘 처리되어 매우 강력합니다 🙂 텍스트를 조작하는 데 더 좋은 것은 없습니다. 하지만이 경우에 Perl로 말했듯이, 교체가 충분하다면 그렇게 멀리 갈 필요가 없습니다.
            어쨌든 파이썬을 사용했을 것입니다 :)

    2.    사냥꾼

      하지만 목이 마르면 더 간단 해집니다. 제가 뭔가 잘못하고있는 것일까 요?

      sed -i "if / What-I-want-to-change / new-to-put /"file-in-which-to-replace

      1.    KZKG ^ 가아라

        heh heh ... "http://my.blog.com/content/"를 "http://my.blog.com/uploads/files/"로 바꾸고 싶다면 😀 ... 이미 거기에 있습니다. \를 공백 등으로 넣으면 복잡해 질까요?

        1.    사냥꾼

          /를 구분 기호로 사용해야하는 것은 아닙니다. +로 봐

          sed -i«s + http : //my.blog.com/content/+http : //my.blog.com/uploads/files/+»파일

          1.    KZKG ^ 가아라

            O_O… WTF!
            당신은 나에게 모든 선택의 세계를 열어 주셨습니다 .. O_O

          2.    Giskard

            나는 우리 모두가 뭔가를 배우는이 게시물을 좋아합니다 🙂
            나는 그것도 몰랐다.

  3.   RAW 기본

    직접 vi ..

    다음과 같이 간단합니다.
    : % s / 미국 / 우리 가족 / g

    %-> 전체 문서
    s-> 검색
    g-> 모든 발생

    인사말 ..

    1.    KZKG ^ 가아라

      당신을 감사하십시오!
      vi로하는 방법을 몰랐습니다

  4.   st0rmt4il

    즐겨 찾기에 추가되었습니다!

    당신을 감사하십시오!

  5.   듀란지

    누구나 관심이있는 경우 Linux sed 명령과 동일합니다. http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html

    1.    의심

      파일 내에서 대체하려는 항목에 따옴표가 있으면 어떻게됩니까?
      예를 들어 텍스트를 바꾸십시오.»1 ″를 텍스트로 바꾸십시오.»2 ″
      명령은 어떻습니까?

  6.   퍼시 살가도

    안녕하세요.

    중간에 @가있는 문자열을 바꾸고 싶었고 텍스트 만 at 앞으로 변경했습니다.

    변경할 텍스트 : 페루 만세
    새 텍스트 : Viva mi patria @percysalgado
    그림 : 내 조국 만세

    당신의 도움을 주셔서 감사합니다

  7.   익명

    "\"이중 사용 @, #가있는 문자 앞에는 슬래시를 사용해야 텍스트로 해석됩니다.

  8.   가바

    그리고 창에서 어떻게하나요 ????