system
虎澤 笑美

2018.4.10システム開発 

Webクリエイター

虎澤 笑美

Macローカルでsed置換すると「sed: 1: invalid command code R」になる時の対処方法

マリンロードスタッフブログをご覧いただいている皆様、こんにちは。
フロントエンドエンジニアの虎澤です。

先日、Macのローカル環境内で、ターミナルからsedを使って一括置換する作業を行いました。
例えば、以下のようなコマンドを打ったとします。

find . -type f -print0 | xargs -0 grep -l hoge | xargs -t -I{} sed -i ‘s#hoge#hogehoge#g’ “{}”;

すると、「sed: 1: invalid command code R」というエラーが出てしまいました。
調査したところ、sedマニュアルのiオプションについてはこう書いてありました。

-i extension
 Edit files in-place, saving backups with the specified extension.
 If a zero-length extension is given, no backup will be saved. It
  is not recommended to give a zero-length extension when in-place
 editing files, as you risk corruption or partial content in situ-
 ations where disk space is exhausted, etc.

どうやら、Mac環境でのsedコマンドでiオプションを使う場合は、拡張子の指定が必須らしいのです。
ただ、推奨はされていませんが、nullでも通りそうだったので、以下のように書き換えて実行してみました。

find . -type f -print0 | xargs -0 grep -l hoge | xargs -t -I{} sed -i “” ‘s#hoge#hogehoge#g’ “{}”;

無事置換できました!
他にも、「sed: RE error: illegal byte sequence」というエラーが出る場合は、

export LANG=C

と打てば無事置換できるようになります。

しかし、Macローカルで標準でUNIX系コマンドが使えるのはとても便利ですね。
今までエディタ経由でやっていた一括置換も、コマンドを使うほうが効率があがりそうです。

以上、虎澤でした。

WEBサイト自己診断シート イメージ
システム開発サービスはこちら
ページTOPへ