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

ファイル内のテキストを置換したい場合があります。例えば、Document.txt ファイル内の「my family」をすべて「us」に変更したい場合などです。これを行うには、お好みのテキストエディタ(Kate、Gedit、Sublime Textなど)を使用できますが、同じ結果を得るための他の方法、つまり代替手段を知っておくことは常に有益です。

正規表現を使えばこれが実現できることが分かりました。`sed`コマンドは実に素晴らしく、無数のバリエーションとオプションがありますが、テキストをできるだけシンプルな方法で置換したい人のために、もっとシンプルな方法をご紹介します。

例に倣って、$HOME/Document.txtに以下のテキストを含む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

この 2 番目の亜種の問題は、サブフォルダー内のファイルを置き換えないことです。

とにかく、面白いと思っていただければ幸いです。私にとって、これは本当に便利でした。ターミナルから直接テキストを置換できるようになりました。素晴らしいです! 


Googleで優先ソースとして追加する