sedは文字列を見つけて置き換えます。

sedは文字列を見つけて置き換えます。

複数のファイルに次の行があります。

<update>2013-02-10</update>
<version>1.15</version>

(新しい日付とバージョン)に置き換えたいです。

<update>2019-06-30</update>
<version>1.28</version>

sedまたはawkを使用して複数のファイルに対してこれをどのように実行できますか? (私はMacオペレーティングシステムを使用しています)

編集1:行が<update> and <version>1つずつ順番に表示されないので、その行が表示されるたびに変更したいと思います。

編集2:日付は異なりますが、文字列は<update>そうではないので、「2013-02-10」を見つけて「新しい日付」に置き換えることはできません。

ベストアンサー1

sed -i backup -E '/<update>/s/[0-9]{4}-[0-9]{2}-[0-9]{2}/2019-06-30/;/<version>/s/[0-9]\.[0-9]{1,2}/1.28/' *
  • -i backupファイルがある場所で編集しますが、拡張子を保持することを意味しますbackup。コマンドが期待どおりに機能したら、削除できます。別のことをしたらバックアップがあってよかったです!
  • -E正規表現を拡張するために使用されます。エスケープする必要はないので、スクリプトを読みやすくします。{}
  • パターンがある各行の日付文字列を/<update>/指定された日付に置き換えます。s/[0-9]{4}-[0-9]{2}-[0-9]{2}/2019-06-30/####-##-##
  • パターンがある各行に対して、バージョン文字列を/<version>/指定されたバージョンに置き換えるか、s/[0-9]\.[0-9]{1,2}/1.28/#.##.##

おすすめ記事