Mac OS 10.10.3では、次のように入力してgnu-sedをインストールしました。
brew install gnu-sed --default-names
もう一度入力すると、次のメッセージが表示されます。
gnu-sed-4.2.2はすでにインストールされています
ただし、システムを再起動してターミナルを再起動した後でも、GNUバージョンのsedを使用できません。例えば:
echo a | sed ’s_A_X_i’
戻り値:置換コマンド「i」の不良フラグ
GNUバージョンを機能させるにはどうすればよいですか? $ PATH変数のパスは次のとおりです。
/Users/WN/-myUnix
/opt/local/bin
/opt/local/sbin
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
/Applications/calibre.app/Contents/MacOS
/opt/ImageMagick/bin
/usr/texbin
質問が明白な場合は申し訳ありませんが、シェルスクリプトを自分で学んでおり、UNIXプログラムがどのようにインストールされているかをまだよく理解していません。 MacでGNUに準拠したコマンド(この場合はsedですが、まもなく他のものも必要になります)を使用して、損傷や不要な混乱を引き起こさないようにしてください。
注(2019):
--with-default-names
オプションは、2019年1月以降 削除 であるため、このオプションは使用できなくなりました。
インストール時に、g
プレフィックスなしでsedを使用する場合、Homebrewはパスの調整方法を指示します。
--with-default-names
オプションなしでgnu-sedがすでにインストールされています。
--with-default-names
オプションを使用すると、/usr/local/bin/
にsed
がインストールされます。gsed
あなたの場合、あなたがやらなければならないことは:
$ brew uninstall gnu-sed
$ brew install gnu-sed --with-default-names
必要に応じてパスを更新...
$ echo $PATH | grep -q '/usr/local/bin'; [ $? -ne 0 ] && export PATH=/usr/local/bin:$PATH
$ echo a | sed 's_A_X_i'
または、gsed
を他の人が提案したように使用します。
Mac OS XのGNUバージョンのsed
をインストールする場合:
$ brew install gnu-sed
使用するプログラムはgsed
です。
たとえば、次のとおりです。
$ echo "Calimero is a little chicken" > test
$ cat test
Calimero is a little chicken
$ gsed -i "s/little/big/g" test
$ cat test
Calimero is a big chicken
また、Mac OS XでのGNUコマンドツールの使用を補完するために、Linuxからツールを入手するための素敵なブログ投稿があります。
OS Xに同梱されるsed
は/usr/bin
にあります。
sed
がインストールするhomebrew
は/usr/local/bin
にあります。
homebrew
を使用する場合、次の2つのオプションがあります。
オプション1
homebrew
sed
を使用するたびに、入力します
/usr/local/bin/sed
または、できれば
オプション2
次のように、ログインプロファイルのPATHで/usr/local/bin/
を前(つまり前)/usr/bin
に移動します
export PATH=/usr/local/bin:<other places>
通常の名前でgnu-sedコマンドを使用する必要がある場合は、bashrcから「gnubin」ディレクトリをPATHに追加できます。 bashまたはターミナルで次のコマンドを使用するだけです。
export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"
$ brew install gnu-sed $ export PATH = "/ usr/local/opt/gnu-sed/libexec/gnubin:$ PATH"
これらの2つのコマンドを使用すると、gnu-sedは適切に動作します
--with-default-names
はMac OS X 10.14.2では動作しなかったので、$PATH
でsed
という名前のシンボリックリンクをgsed
上位に作成しました
また、sed.1
という名前のシンボリックリンクをgsed.1
の上位の$MANPATH
マンページに作成したので、man
はデフォルトのgsed
マンページではなく、sed
マンページにアクセスします。