![sed は次のエラー sed を返します: -e 式 #1, 文字 101: `s' の未知のオプション [重複]](https://linux33.com/image/79824/sed%20%E3%81%AF%E6%AC%A1%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC%20sed%20%E3%82%92%E8%BF%94%E3%81%97%E3%81%BE%E3%81%99%3A%20-e%20%E5%BC%8F%20%231%2C%20%E6%96%87%E5%AD%97%20101%3A%20%60s'%20%E3%81%AE%E6%9C%AA%E7%9F%A5%E3%81%AE%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%20%5B%E9%87%8D%E8%A4%87%5D.png)
<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-
。