バックグラウンド
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」のように使用できます。