30個のファイルを選択し、そのファイルに対して複数のsedコマンドを実行する方法

30個のファイルを選択し、そのファイルに対して複数のsedコマンドを実行する方法

ファイルの新しいコピーが必要なので、次のようなことをしたいと思います。

dir *.rb
foreach file
  make a copy of the file, e.g. 'blob.rb' to 'blob_processed.rb'
  do the 50 sed commands to process the blob_processed.rb file
end

この手順を実行する30個のファイルを作成せずにこれを行うことができます(コピー後のすべてのsed)。 sedは少し長いが動作し、各ファイルはまったく同じです。一例:

sed -i "s#require "selenium-webdriver"#require 'my_helper' #" blob_processed.rb

ベストアンサー1

  1. *.rb出力を書き込む一時ディレクトリがあることを確認してください。そうしないと、ファイルをインポートせずにblob_processed_processed.rbコマンドを2回実行できません。すべてが完了し、正常に機能したら、いつでも一時ディレクトリから出力ファイルをコピーできます。

  2. ""少なくともスペースを含むファイル名を処理できるように、ファイル名を入力してください。

  3. sedコマンドで\"二重引用符をエスケープするには、バックスラッシュ()を使用します。

結果は次のとおりです。

#!/bin/bash
mkdir -p tmp
for i in *.rb
do
    out=tmp/${i%.rb}_processed.rb
    cp "$i" "$out"
    sed -i "s#require \"selenium-webdriver\"#require 'my_helper' #" "$out"
done

[Edited by Michael (OP)] しかし、私はそうしましたが、これはほとんどうまくいきます:

#!/bin/bash
mkdir -p tmp
for i in *.rb
do
  out=tmp/${i}
  cp "$i" "$out"
done

同じファイル名を保持しますが、すべての新しいファイルをtmp /の下に配置します。

おすすめ記事