24

このコマンドを MacOSX 端末で実行しようとしていますが、当初は Linux で実行する予定でした。

sed '1 i VISPATH=/mnt/local/gdrive/public/3DVis' init.txt >> ~/.bash_profile

しかし、それは私にエラーを与えます:

command i expects \ followed by text. 

上記のコマンドを MacOSX 端末で動作するように変更する方法はありますか

4

5 に答える 5

18

同じ問題があり、brewで解決しました:

brew install gnu-sed

gsed YOUR_USUAL_SED_COMMAND

sed コマンドを使用する場合は、エイリアスを設定できます。

alias sed=gsed

于 2015-05-05T08:34:31.853 に答える
6

OSXsedは古いバージョンに基づいているので、sedへの道順をもっと文字通りにする必要があります。幸運なことに、この場合は、sed正確に何をすべきかを教えてくれます。OSXを持っていないのでテストされていませんが、試してみてください

sed '1 i\
VISPATH=/mnt/local/gdrive/public/3DVis

' init.txt >> ~/.bash_profile

cmdを介した入力iは、空白行で終了します。その後、他のsedの指示に従うことができます。注意してください、charの後に\charはありません!

また、@StephenNiedzielskiは正しいです。一重引用符を使用して、sedステートメントをラップします。(sed内で変数の拡張が必要で、他の使用法を回避できる$場合は、dbl-quotesを使用することもできますが、通常の方法としてはお勧めしません。

編集

スクリプトや他のエディターではなく、コマンドラインからこれを実行していることを理解したので、上記をテストしました。....私が言えるのはテクニカルサポートからの有名な行だけです... "わたしにはできる"。エラーメッセージが表示された場合

sed: -e expression #1, char 8: extra characters after command

次に、ほぼ確実に、の後にいくつかの文字を追加しました \。テストしたところ、上記のエラーメッセージが表示されました。(私はLinuxバージョンのsedを使用しているので、エラーメッセージはまったく同じです)。質問を編集して、コマンドラインの正確なカットアンドペーストと新しいエラーメッセージを含める必要があります。curly-single-quotesの使用は機能しません。

IHTH

于 2013-02-13T04:23:33.110 に答える
5

これが OS X での解決方法です。私の場合、ファイルの前にテキストを追加する必要がありました。どうやら、最新の sed は次のように機能します。

sed -i '1i text to prepend' file.txt

しかし、OS XI では、次のことを行う必要がありました。

sed -i '' '1i\
text to prepend
' file.txt
于 2014-02-22T05:58:03.987 に答える
2

リッチ テキストをコピーしたようです。一重引用符は、カーリーではなくまっすぐにする必要があります。

sed '1 i VISPATH=/mnt/local/gdrive/public/3DVis' 
于 2013-02-13T04:20:06.153 に答える