web-dev-qa-db-ja.com

-iオプション(インプレース編集)を指定したsedコマンドはUbuntuで正常に機能しますが、Macでは機能しません

私はSedについて何も知りませんが、Mac OSXで動作するにはこのコマンド(Ubuntuでは正常に動作します)が必要です:

sed -i "/ $domain .*#drupalpro/d" /etc/hosts

私は得ています:

sed: 1: "/etc/hosts": extra characters at the end of h command
89

UbuntuにはGNU sedが付属しています。-iオプションのサフィックスはオプションです。 OS XにはBSD sedが同梱されていますが、サフィックスは必須です。 sed -i ''を試してください

145
microtherion

男はあなたの友達です。

OS X

 -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.
21

OS Xでは、GNUバージョンのsed:gsedを使用できます。

# if using brew
brew install gnu-sed

#if using ports
Sudo port install gsed

次に、スクリプトを移植可能にする必要がある場合、OSに応じて、使用するコマンドを定義できます。

SED=sed
unamestr=`uname`
if [[ "$unamestr" == "Darwin" ]] ; then
    SED=gsed
    type $SED >/dev/null 2>&1 || {
        echo >&2 "$SED it's not installed. Try: brew install gnu-sed" ;
        exit 1;
    }
fi
# here your sed command, e.g.:
$SED -i "/ $domain .*#drupalpro/d" /etc/hosts
5
jcarballo