yupaがエンジニアになるまでを記録するブログ

FjordBootCamp (フィヨルドブートキャンプ ) で学んだことや、趣味のVRに関するメモを記録していきます

sedである文字列が含まれる行を指定したファイルの内容に置き換える方法

$ cat source.txt 
hoge
fuga
piyo
$ cat replace.txt 
sekisaba
aji
hotate

例えば、source.txtで"fuga"が含まれる行をreplace.txtの内容で置き換えて上書きしたい場合、こうする。

$ gsed -i -e "/fuga/r replace.txt" -e "/fuga/d" source.txt

結果

$ cat source.txt 
hoge
sekisaba
aji
hotate
piyo

コマンドとオプションの解説

  • -iオプション : 編集結果を入力ファイルに上書きする
  • -eオプション : 実行するコマンドにスクリプトを追加する
  • r コマンド : ファイルを読み込む
  • d コマンド : パターンに一致する行を削除

ちなみにMac標準のsedBSD版のものらしく、-iオプションの挙動が異なるので上記の結果を得る場合はgnu-sedで実行する必要がある。
$brew install gnu-sedでインストール可能。

参考 : sed, a stream editor