BLOGスタッフブログ

インソースマーケティングデザイン

2018.04.10 システム

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系コマンドが使えるのはとても便利ですね。
今までエディタ経由でやっていた一括置換も、コマンドを使うほうが効率があがりそうです。

以上、虎澤でした。

インソースマーケティングデザインが書いた他の記事

見積もり・ご依頼など、
お気軽にご相談ください

本サイトはユーザーエクスペリエンスの向上などを目的に、Cookieを使用しています。
右記のバナーで「同意する」をクリックする、または本サイトを利用することにより、
お客様は弊社のCookieポリシーに同意したことになります。

同意します