BLOGスタッフブログ

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

2018.08.03 システム

さくらインターネット(レンタルサーバー)内でsed置換する

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

以前、ブログにて、Macローカル環境でsed置換する際のコマンドについてご紹介いたしました。
Macローカルでsed置換すると「sed: 1: invalid command code R」になる時の対処方法

もう一度ご紹介しますが、Macローカルで一括置換を行うときのコマンドは以下のようになります。

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

さて、先日さくらインターネットのレンタルサーバー内にSSHログインして、パスの置換作業を行う機会がありました。
その際、上記のコマンドを流用して置換を行おうと思い、実行してみたところ、以下のようなエラーが返ってきてしまいました。

% find . -type f -print0 | xargs -0 grep -l hoge | xargs -t -I{} sed -i ‘s#hoge#hogehoge#g’ “{}”;
xargs: illegal option — I
usage: xargs [-0opt] [-E eofstr] [-I replstr [-R replacements] [-S replsize]]
 [-J replstr] [-L number] [-n number [-x]] [-P maxprocs]
 [-s size] [utility [argument …]]

同じコマンドなのになぜ通らないの!?と原因をいろいろと探っていると、本当に細かい仕様が違っているようでした。

①I{}の書き方
 BSDではIと{}の間にスペースが必要。MacローカルやLinux環境ではスペースは入れなくても処理は通る。

②sed -iの書き方
 BSDとMacローカルでは「sed -i “”」とかかなければダメ。Linuxでは「sed -i」でも処理は通る。

よって、さくらのレンタルサーバーでsed置換を行う際は、以下のようなコマンドになります。

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

環境によってコマンドの仕様は細かく違うようですね。
きっとxargsやsed以外にも仕様に違いのあるコマンドはたくさんあると思います。
Linuxで動いていたのにBSDじゃ動かない!ってときは、コマンドのマニュアルを確認して試行錯誤してみるしかないですね。

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

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

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

同意します