0

このコマンドをシェルスクリプトで使用しています

lnum=5
str="Hello foo"
filename="/path/fiename"   

 sed -i "$lnum i $str" $filename

次のエラーを取得する

sed: -e expression #1, char 3: : doesn't want any addresses

以前にこのコマンドを他のスクリプトに使用したことがあり、正常に機能しました。今回行った唯一の変更は、ファイル名にファイルへのパスがあることですが、パスに入ってパスではなく、ファイル名を指定するだけで試しましたスクリプトを実行しますが、それでも機能しません

解決できません 誰か助けてください

4

2 に答える 2

0

の OSX 、BSD (および AIX) バージョンを使用している場合、インプレース編集フラグsedのバックアップ拡張機能はオプションではありません-i

GNUsedはこれとは異なると思いますので、スクリプトは Linux で動作する可能性があります。

これは移植性にとっては少々問題ですが、BSD 派生sedを使用する場合の「インプレース」編集ではさらに悪化します。このバージョンのsedは、間違いなくいくつかの点でより「標準的」です (「POSIX システム全体の最小公分母」のように) が、この動作はバグのように見えます:

sed: 1: "5 i hello foo": command i expects \ followed by text

いくつかの BSD フレーバーでスクリプトを動作させる方法を次に示します。

lnum="5"
str="Hello foo"                                                                 
filename="sed-mess.txt"

sed -i "" "$lnum i\^M 
$str" $filename

コマンドを機能Ctrl-v [Return]させるには、リテラルの行末文字を入力する必要がありました。GNUがこれをどのように処理するかわかりません。 i\sed

使えますperlか?;-)

于 2013-07-04T19:20:22.807 に答える