#author("2025-12-12T06:31:59+09:00","default:Miyashita","Miyashita") #author("2025-12-12T06:32:17+09:00","default:Miyashita","Miyashita") *ファイル内の文字列を置換する [#ca85ba4c] ** sed 基本 [#c92c0d4b] ファイル foobar.txt 内に含まれる org という文字列を new に置換した, hoge.txt というファイルを作成する場合 #codeprettify{{ sed -e "s/org/new/g" ./foobar.txt > ./hoge.txt }} e オプションは expression を指し,-e の後に置換の表現を記述する.~ 「/g」をつけるとファイル内でマッチしたパターン全てを置換する.「/」で終わる場合は最初にマッチした1回のみ.~ ファイルに上書きするときは -i を付け加える.-i のあとに何か文字列を入れると,元々のファイル名にその文字列が追加された,置換前のバックアップファイルも同時に生成される.~ grep でディレクトリ内のファイルをリストアップして,その全てを対象に置換することもできる.~ #codeprettify{{ grep -rlI "org" path/of/somewhere | xargs -n1 sed -i -e "s/org/new/g" }} #codeprettify{{ for f in `grep -rlI "org" path/of/somewhere `; do sed -i -e "s/org/new/g" $f; done }} 特殊文字を含む場合は,文字の前にバックスラッシュでエスケープするのを忘れないように. **注意 [#k71eba01] Mac の sed は -i -e "" とオプションをつけると,上書きはされるが,別途ファイル名の後ろに -e とついた新しいファイルが生成され,これはバックアップ用の変更前ファイルになる.~ これは -i の引数として "-e" が入ってしまうからで, #codeprettify{{ sed -i '' -e "" sed -i '' -e "s/org/new/g" }} と,''でバックアップファイルを生成しないことを明記すれば,単なる上書きになる.