1. ホーム
  2. regex

[解決済み] sed と grep/egrep を使った検索と置換

2022-12-13 09:23:10

質問

私は egrep -R の後に、10個程度のユニオンを含む正規表現が続くので、以下のようになります。 .jpg | .png | .gif などです。これはうまくいきますが、今度は見つかった文字列をすべて .bmp

私は次のようなものを考えていました

egrep -lR "\.jpg|\.png|\.gif" . | sed "s/some_expression/.jpg/" file_it_came_form

で同じような正規表現を行うにはどうすればよいかということです。 sed で、入力されたファイルに変更を保存するようにするにはどうすればよいかということです。

どのように解決するのですか?

このコマンドを使用します。

egrep -lRZ "\.jpg|\.png|\.gif" . \
    | xargs -0 -l sed -i -e 's/\.jpg\|\.gif\|\.png/.bmp/g'

  • egrep : 拡張正規表現を使用して一致する行を検索します。

    • -l : 一致するファイル名のみをリストアップ

    • -R : 与えられたすべてのディレクトリを再帰的に検索します。

    • -Z 使用 \0 をレコードの区切り文字として使う。

    • "\.jpg|\.png|\.gif" : 文字列のひとつにマッチします。 ".jpg" , ".gif" または ".png"

    • . : カレントディレクトリの検索を開始します。

  • xargs stdin を引数としてコマンドを実行します。

    • -0 使用 \0 をレコードの区切り文字として使う。これは -Zegrep で、入力ファイル名のスペースや改行に惑わされないようにするためです。

    • -l : パラメータとして1つのコマンドにつき1行を使用

  • sed : その s トリーム エド イトール

    • -i : バックアップを取らずに、入力ファイルを出力ファイルに置き換える。

    • -e : 次の引数を式として使用します。

    • 's/\.jpg\|\.gif\|\.png/.bmp/g' : 全ての文字列を置き換えます。 ".jpg" , ".gif" または ".png"".bmp"