sed
Linuxで使用されているGNUスクリプトがインストールされており、GNUisms/bin/sed
が含まれているようです。 Mac OS Xを使用する共同作業者がいます。 GNU以外のインストールsed
、場所、/usr/bin/sed
およびHomebrew(http://mxcl.github.io/homebrew/)sed
次のようにGNUをインストールできます。gsed
コアツールパッケージはにあります/usr/local/bin/gsed
。
現在のスクリプトはで始まります#!/bin/sed -f
。sed
GNUをインストールしたときにMac OS Xで動作するように変更するにはどうすればよいですかgsed
?
別のオプションはGNUismを削除することですが、共同編集者に中間バージョンのテストを依頼するためにMac OS Xをインストールしていないため、少し難しいかもしれません。
答え1
いくつかのオプションがあります:
#!/usr/bin/gsed -f
どこでも(そこにあると仮定して/usr/bin
)Shebangとして使用し、Linux環境が正しくシンボリックリンクされていることを確認してください。- GNUismを削除します。
sed
ユーザーディレクトリより古いディレクトリのシンボリックリンク(/usr/bin/gsed
潜在的に危険)/usr/bin
$PATH
- 次のようにラッパースクリプトを作成します。
#!/bin/sh
script=/foo
type gsed >/dev/null 2>&1 && exec gsed -f "$script"
exec sed -f "$script"
最後に、1つ以上の環境を変更する必要があるか、スクリプト自体を変更する必要があります。
答え2
次のようにスクリプトを起動できますsed
。
\:;s=sed;type gsed >/dev/null 2>&1 && s=gsed; exec "$s" -f "$0" "$@";$:s/^//
これは何もしません(スクリプトのパフォーマンスはわずかに低下しますが)、シェルによって解釈されたときに見つかったかどうかsed
にかかわらず実行されます(両方とも検索されます)。gsed
sed
$PATH
答え3
(私自身の質問に答えるか、むしろこの場合に動作する代替手段を提供します。)
sha-bangで始まるスクリプトでも、コマンドラインからターゲットファイルに適用できますsed
。これは、Mac OS Xでスクリプトを 。ascript.sed
target.txt
sed -f ascript.sed target.txt
gsed -f ascript.sed target.txt