Project

General

Profile

複数のファイル編集処理

ファイル編集のステップ

  1. 編集するファイルのパスを取得する
  2. xargsで1行ずつパスをsedコマンドに渡す
  3. sedコマンドで変換処理を行う

コマンド内容

  • コマンドの例
    egrep -l '^ファイル検索ワード$' /path/to/* |xargs -L 1 sed -i.bak -r 's/^変換前ワード$/変換後ワード/'
    
    • egrep -l
      正規表現つきgrepにマッチするファイルのフルパスを表示
    • xargs -L 1
      egrepの結果が複数の場合、出力結果が1行ずつ次のコマンドに渡す
    • sed -i.bak
      ファイルを直接編集し、変更前ファイルを拡張子.bakで同じディレクトリにバックアップする
    • sed -r
      拡張正規表現を利用する。『^$*』などをエスケープ文字『\』なしで記述することができる

補足

sedの処理で行まるごとではなく『カラム 値』の値だけ変更する場合。

  • 次内部コマンドを指定する
    sed -i.bak -r 's/(^カラム名 *)変更前値$/\1変更後値/'
    
    • (^カラム名 *)
      『()』で括った文字列は、変更後にそのまま引用することができる
      『 *』はカラム名と値の間のスペースが複数あってもマッチするとする
    • 変更前値$
      『値$』は行末を示す。
      値の後にスペースやコメントがある場合は調整する必要がある。ただし何か指定しないと『param』で
      マッチさせたら『param_name』『param_date』なども誤爆して引っかかるので注意が必要。
    • \1変更後値
      『\1』は前段で『()』で括った引用の1つ目を指す。
      『()』が複数ある場合は『\2』等で指定することができる