sed は次のエラー sed を返します: -e 式 #1, 文字 101: `s' の未知のオプション [重複]

sed は次のエラー sed を返します: -e 式 #1, 文字 101: `s' の未知のオプション [重複]

<p>タグ()を一部のテキストファイルへのパスに置き換えるスクリプトを作成しています*.prop。ただし、実行すると、次のエラーが発生します。

sed: -e expression #1, char 101: unknown option to `s'

私のコードは次のとおりです。

sed -i --  "s/<q>$(echo $destpath | sed -e 's/\\/\\\\/g' -e 's/\//\\\//g' -e 's/&/\\\&/g')/\ResultsTesting/\/g" *.prop

コードエコーを印刷すると、次のようになります。

sed -i -- \
s/<q>\/home-students\/rmorales\/testAPK\/air.air.air.com.tabc.gsn-2014_5_11-dex2jar\/ResultsTesting\//g \
myFile.prop

誰でも私を助けることができますか?

ベストアンサー1

私はそうします:

printf %s\\n "$destpath" |
sed -e 's|[]\$/^.*[]|\\&|g' \
    -e 's|.*|s/<q>&/ResultsTesting\\//|' |
sed -i -- -f- myfile.prop

(部分)あなたの問題はあなたです(確かに)間違った政党を引用しました。代替文の左側では、s///次の文字をエスケープする必要があります。

$^.*\[] delimiter

最初の2つはいくつかの場所でエスケープするだけですが、他の場所ではエスケープしても問題はありませんので、すべてエスケープすることをお勧めします。/通常、コマンドの区切り文字は - です。

右の場合は脱出する必要があります。

\& delimiter newline

これはあなたがしたいことだと思います。(引用には少し作業が必要ですが)。 LHSでは、改行を避ける方法は実際にはありませんが、(代替エスケープ文字列に完全に置き換えることを除いて\n、RHSからエスケープすることができます。しかし、LHSにエスケープされたテキストを挿入しています。

上記の例では、私はsedあなたのような2つのsを使用していますが、内部コマンドの代わりに左から右にコマンドをパイプします。(通常私の好み)次に、スイッチを使用してsed生成されたスクリプトを標準入力にインポートします-f-

おすすめ記事