用一個命令替換文件中的文本:perl

在某些情況下,我們想替換文件中的文本,例如,在 Document.txt “我的家人”對“我們”所說的一切。 為此,我們可以使用首選的文本編輯器(Kate,Gedit,SublimeText等),但是了解變體以及其他實現相同結果的方法總是很不錯的🙂

碰巧 常用表達 可以實現,sed命令簡直是宏偉,它具有無窮的變體和選項,但是...對於那些只想從 最簡單的方法,對於他們來說,我帶來了這個簡單得多的變體:

在示例之後,我們有文件 Document.txt 位於 $ HOME / Document.txt 帶有以下文本:

(......) 我的家庭 就像他們所有人一樣,就像您或您鄰居的一樣。 事實上 我的家庭 在政治和社會上,我們努力成為負責任的人,並在社會的眼中。 但是,在我的房子裡有一隻敗類,這就是我的角色LOL!。 我一直都是不怕說出自己想法的人(即使在社會上看來這顯然不正確),儘管實際上我的家人已經受夠了 污垢 當今社會。

使用以下命令,您將更改«我的家庭“由”我們“:

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

該命令可能看起來有些複雜,讓我們對其進行分解並更簡單地進行解釋😉

  • perl的 :perl我們將使用的內容
  • -pi :Pí,如何 π (近似值為3.14)
  • -e :E將其想像為“ e執行” ^ - ^
  • 然後用引號 » 我們打開一個 s 然後以 g:“ sg” …想像S為開始而G為遊戲結束😀
  • 在之間切換 sg 我們必須放兩套方括號: [] y [],就是這樣: “ S [] [] g”
  • 如上所述,在第一個括號內,我們要刪除並替換為新的文本,而在第二個括號內,要放入新文本,如下例: “ S [我的家人] [我們] g”

是不是很簡單?

解釋實際上比命令所需要的要廣泛得多,很容易理解🙂

Perl不僅僅是替換文本的一種方式,它還是一種完整的語言😉

如果要了解更多信息,請安裝軟件包 Perl文件 看看它允許什麼,這只是一個不同的世界。

順便說一句,關閉,假設您要查找$ HOME / Documents中所有的.txt文件,並在每個文件中用“ us”替換“ my family”,則可以加入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ÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。

  1.   繁榮 他說:

    好吧,我想我們這裡的許多人都知道sed命令,它具有相同的目的,它可以做得更好並且更易於使用...

    1.    KZKG ^ Gaara 他說:

      謝謝你的評論,
      僅兩個細節,為什麼您說sed會使它更好呢? 這麼多“怪異”字符真的更容易使用嗎?

  2.   Federico A.ValdésToujague 他說:

    祝福大家!!!。 我已經使用了命令 口渴,這裡用perl描述的方法更簡單。 謝謝KZKG ^ Gaara !!!。

    1.    KZKG ^ Gaara 他說:

      謝謝你的評論🙂
      好吧,至少對我來說,這似乎比正則表達式更簡單……因為有這麼多“怪異”字符,對於不懂事的人來說,可以做一些真正複雜的事情來理解和學習。

      1.    Giskard 他說:

        有一句老話:«我有一個問題,我決定使用正則表達式...現在我有兩個問題»

        1.    KZKG ^ Gaara 他說:

          哈哈哈哈哈哈哈!!!
          正則表達式可以在特定程度上挽救我們的生命……是的,要花很長時間才能學會使用它們,而不會死於嘗試。

          如果我幾年前知道這個命令,上帝! 我的生活會多麼簡單😀

          1.    Giskard 他說:

            明確! 處理得很好,它們非常強大🙂沒有什麼比操縱文本更好的了。 但是有時候,就像您在本例中使用Perl所說的那樣,如果替換足夠,您不必走那麼遠。
            無論如何我都會使用Python :)

    2.    獵人 他說:

      但是在口渴的時候,我覺得這更簡單了……我在做錯什麼嗎?

      sed -i“如果/我要更改什麼/新投入/”替換文件

      1.    KZKG ^ Gaara 他說:

        呵呵...如果我想將“ 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 ^ Gaara 他說:

            O_O…WTF!
            您現在已經為我打開了一整套選擇。.O_O

          2.    Giskard 他說:

            我喜歡這些我們都學到一些東西的帖子🙂
            我也不知道

  3.   RAW基本 他說:

    我更喜歡直接使用vi ..

    就像:
    :%s /我們/我的家人/ g

    %->整個文件
    s->搜索
    g->所有出現

    問候......

    1.    KZKG ^ Gaara 他說:

      格拉西亞斯!
      我不知道如何用vi

  4.   st0rmt4il 他說:

    已添加到收藏夾!

    格拉西亞斯!

  5.   n3暴風雨 他說:
  6.   杜蘭 他說:

    如果您有興趣的話,與Linux sed命令相同: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html

    1.    懷疑 他說:

      如果我要替換的文件內帶有引號,該怎麼辦?
      示例將文字“»1”替換為文字:»2”
      命令將如何?

  7.   珀西·薩爾加多(Percy Salgado) 他說:

    你好

    我想替換一個在中間帶有@且僅將文本更改為at之前的字符串。

    更改文字:秘魯萬歲
    新文字:Viva mi patria @percysalgado
    顯示:我的祖國萬歲

    謝謝你的幫助

  8.   匿名 他說:

    “ \”您必須在帶有雙用@,#的字符之前使用斜杠,以便將它們解釋為文本。

  9.   加巴 他說:

    以及如何在Windows中執行呢?