ファイル内のテキストをXNUMXつのコマンドで置き換えます:perl

ファイル内のテキストを置き換えたい場合があります。たとえば、 Document.txt 「私の家族」が「私たち」のために言うすべて。 これを実現するには、好みのテキストエディター(Kate、Gedit、SublimeTextなど)を使用できますが、同じ結果を実現するためのバリアントや他の方法を知っておくのは常に良いことです🙂

それは 正規表現 これは達成できます。sedコマンドは単純に素晴らしく、無限のバリエーションとオプションがありますが...からのテキストを置き換えるだけの人のために 可能な限り最も複雑でない方法、彼らのために、私はこれよりはるかに単純なバリアントを持ってくるということです:

例に従って、ファイルがあります Document.txt にあります $ HOME / Document.txt 次のテキストで:

(...) 私の家族 それはあなたやあなたの隣人のように、それらすべてのようです。 実際には 私の家族 私たちは責任ある人々であり、社会の目から見て、政治的および社会的に正しいことを目指しています。 でも、私の家には黒い羊がいて、それが私の役目です! 私はいつも彼の考えを言うことを恐れない人です(たとえそれが社会の目には明らかに正しくなくても)、実際には私の家族はうんざりしています 今日の社会。

次のコマンドを使用して、«を変更します私の家族" 沿って "私達「:

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

コマンドは少し複雑に見えるかもしれませんが、少し分解してもう少し簡単に説明しましょう😉

  • パール :使用するもの、perl
  • -円周率 :Pí、どのように π (3.14の概算値)
  • -e :Eは«eが実行する»ことを想像します ^ - ^
  • その後、引用符で » 私たちはで開きます s そして、私たちは g:「sg」 …スタートのSとゲームオーバーのGを想像してみてください😀
  • の間を回します sg XNUMX組の角かっこを配置する必要があります。 [] y []、そのように: 「S [] [] g」
  • 上で述べたように、最初の角かっこの中には、削除して新しいものに置き換えたいテキストが表示され、XNUMX番目の角かっこのセットには、次の例に従って新しいテキストが表示されます。 「S [私の家族] [私たち] g」

簡単ですね。

説明は実際にはコマンドに必要なものよりもはるかに広範囲であり、理解するのは非常に簡単です🙂

Perlは、テキストを置き換える方法以上のものであり、ホールランゲージです😉

詳細を知りたい場合は、パッケージをインストールしてください perl-doc そして、それが何を可能にするかを見てみましょう。それはただの別の宇宙です。

ちなみに、閉じて、$ HOME / Documents /にあるすべての.txtファイルを検索し、それぞれで「myfamily」を「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

このXNUMX番目のバリアントの問題は、サブフォルダーにあるファイルでは置き換えられないことです。

とにかく、おもしろいと思います。 私にとってそれは本当に便利でした、私はすでにターミナルから直接テキストを置き換えることができます...素晴らしいです! 😀


21コメント、あなたのコメントを残してください

コメントを残す

あなたのメールアドレスが公開されることはありません。 必須フィールドには付いています *

*

*

  1. データの責任者:MiguelÁngelGatón
  2. データの目的:SPAMの制御、コメント管理。
  3. 正当化:あなたの同意
  4. データの伝達:法的義務がある場合を除き、データが第三者に伝達されることはありません。
  5. データストレージ:Occentus Networks(EU)がホストするデータベース
  6. 権利:いつでも情報を制限、回復、削除できます。

  1.   航空宇宙産業向けソリューション

    さて、ここにいる私たちの多くは、同じ目的を果たすsedコマンドを知っていると思います。それははるかに優れており、使いやすいです...

    1.    KZKG ^我愛羅

      ご意見をありがとうございます、
      たったXNUMXつの詳細、なぜsedがそれをより良くすると言うのですか? 非常に多くの「奇妙な」文字で使用するのは本当に簡単ですか?

  2.   FedericoA.ValdésToujague

    皆さんこんにちは!!!。 コマンドを使用しました sed、そしてここでperlを使って説明した方法はもっと簡単です。 ありがとうKZKG ^我愛羅!!!。

    1.    KZKG ^我愛羅

      コメントありがとうございます🙂
      まあ、少なくとも私にはこれは正規表現よりも単純なようです...非常に多くの「奇妙な」文字があるので、理解して学ぶのが本当に複雑なことは、知識のない人にも行うことができます。

      1.    ギスカード

        そこには«古い»格言があります:«問題がありました。正規表現を使用することにしました...今はXNUMXつの問題があります»😉

        1.    KZKG ^我愛羅

          ハハハハハハハ!!!
          正規表現はある時点で私たちの命を救うことができます...はい、それらの使い方を学ぶのに長い時間がかかります。

          私が何年も前にこのコマンドを知っていたなら、神! 私の人生はどれほどシンプルだっただろう😀

          1.    ギスカード

            晴れ! うまく処理されると、非常に強力です🙂テキストを操作するのにこれ以上の方法はありません。 しかし、この場合Perlで言うように、置換で十分であれば、それほど遠くまで行く必要がない場合もあります。
            とにかくPythonを使っていただろう:)

    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.    ギスカード

            私たちは皆、何かを学ぶこれらの投稿が大好きです🙂
            私もそれを知りませんでした。

  3.   RAW-基本

    私は直接viを使用することを好みます..

    単純な:
    :%s /私たち/私の家族/ g

    %->ドキュメント全体
    s->検索
    g->すべての出現

    挨拶..

    1.    KZKG ^我愛羅

      ありがとうございます!
      私はviでそれを行う方法を知りませんでした

  4.   st0rmt4il

    お気に入りに追加!

    ありがとうございます!

  5.   n3嵐

    rplコマンドが少しある場合は、それを見てください

    http://microbuffer.wordpress.com/2011/02/28/rpl-buscar-y-reemplazar-strings-en-linux-unix/

  6.   デュラン

    素晴らしいエントリーです!誰かが興味を持っている場合は、Linuxsedコマンドと同じです。 http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html

    1.    疑う

      また、ファイル内で置き換えたいものに引用符が含まれている場合はどうなりますか?
      例:テキストの内容を置き換えます:»1″をテキストに置き換えます:»2″
      コマンドはどうなりますか?

  7.   パーシーサルガド

    もしもし

    中央に@があり、テキストをatの前にのみ変更した文字列を置き換えたいと思いました。

    変更するテキスト:長生きするペルー
    新しいテキスト:Viva mi patria @percysalgado
    写真:私の故郷を長生きさせる

    ご協力いただきありがとうございます

  8.   匿名の

    "\"テキストとして解釈されるように、@、#を二重に使用する文字の前にスラッシュを使用する必要があります。

  9.   GABA

    そして、どうすればWindowsでそれを行うことができますか????