Linux: ファイル置換の 3 つの方法 sed、awk、perl

バックグラウンド

Linux ファイルの内容の置き換え。sed、awk、perl の 3 種類についてインターネットで調べました。今日は 1 つずつ使用して、それらがどのようなものであるかを見てみましょう。

セド

文法

Linux sed コマンドは、スクリプトを使用してテキスト ファイルを処理します。詳細なドキュメント

sed [-hnV][-e<script>][-f<script文件>][文本文件]

find を使用すると、フォルダーを検索および置換できます。
find ./ -name "*.js" | xargs sed -i '' 's/aaa/hhh/g'

質問

通常、このコマンドは Linux で有効になります。

sed -i 's/aaa/hhh/g' index.js

しかし、実行しようとするとエラーが発生しますcommand i expects \ followed by text。その理由は、Mac では sed が BSD から来ており、一般的な Linux ボックスの sed とは少し異なるためです。
ここに画像の説明を挿入
この問題を解決するには 2 つの方法があります。

1. 空の文字列を追加します

ここに画像の説明を挿入

sed -i '' 's/aaa/hhh/g' index.js

Mac では、文字列を追加する必要があります。
ここでの空の文字列は、バックアップ ファイルのサフィックスを意味します。たとえば、次のように入力します。

sed -i '.source' 's/aaa/hhh/g' index.js

ここに画像の説明を挿入

2. gnu-sed をダウンロードする

brew install gnu-sed

ああ

AWK はテキスト ファイルを操作するための言語であり、強力なテキスト分析ツールです。

文法

awk [选项参数] 'script' var=value file(s)

詳細なドキュメント

awk '{ sub(/aaa/,"hhh"); print $0 }' index.js

ここに画像の説明を挿入
確かに aaa が haha​​ に変更されていることがわかりますが、ソースファイルを変更せずに出力しただけなので、どう変更すればよいでしょうか。使用>

Linux では、> はコンテンツを記述することを意味し、>> はコンテンツを追加することを意味します。この記事を読むことができます。

awk '{ sub(/aaa/,"hhh"); print $0 > "index.js" }' index.js

ここに画像の説明を挿入
これなら普通に交換できるよ

パール

perl は Linux に付属するプログラミング言語です。詳細なドキュメント
Perl は、C、sed、awk、シェル スクリプト、およびその他の多くのプログラミング言語から機能を借用しており、構文はこれらの言語に似ていますが、独自の機能もあります。
ここに画像の説明を挿入

文法

  • -p は、後で追加されたファイル名パラメータをトラバースするように Perl に指示します。これは、sed のこのコードの効果とほぼ同じです。
  • -i は、ファイルを読み取るときのバックアップ操作に大まかに使用されます。
  • -e は Perl に perl ステートメントに従うように指示します
  • -p と -i は組み合わせることができます。 -pi、-p、-e も組み合わせることができますが、-i、-e を組み合わせて -ie と書くことはできません。

perl -pi -e 's|aaa|hhh|g' index.js

ここに画像の説明を挿入
交換してバックアップを作成する

perl -pi.source -e 's|aaa|hhh|g' index.js

ここに画像の説明を挿入

find ./ -name "*.js" | xargs perl -pi -e 's|aaa|hhh|g'

ここに画像の説明を挿入

要約する

  • sed - ファイルに対して単純なテキスト変換を行う必要がある場合。
  • awk - データを単純にフォーマットして要約または変換する必要がある場合。
  • perl - ほぼすべてのタスクですが、特に複雑な正規表現が必要なタスクの場合に使用します。
  • python - 同じタスクに Perl を使用できます。

sed はエディター (コマンド ライン)
awk はテキスト処理ツール (コマンド ライン)
シェル、perl、python はプログラミング言語

上記の / と | は、「s/aaa/haha/g」、「s|aaa|haha|g」のように使用できます。

おすすめ

転載: blog.csdn.net/weixin_43972437/article/details/130604845