私のsedコマンドでエラーsed:-e式#1、文字22: `s'の未知のオプションが発生します。

私のsedコマンドでエラーsed:-e式#1、文字22: `s'の未知のオプションが発生します。

私のスクリプトで次のコマンドを試しましたが、エラーが発生しました。

sed -i -e 's/\(dataTable\)/$replace \1/' file.txt

エラーメッセージ、

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

エラーを回避するには、コマンドを修正するのに役立ちます。

ありがとうございます!

答え1

私はあなたが仮定実際に式の周りにsed一重引用符の代わりに二重引用符を使用してください。それ以外の場合、エラーは発生しません。

また、値に$replaceスラッシュ()を含む文字列を使用すると仮定します/。変数が拡張されると、その値がsedステートメントに挿入され、スラッシュが含まれているため、s///コマンド構文は中断されます。

コマンドで使用されている区切り文字sedをに存在しない他の文字に変更すると、この問題を解決できます$replace

@たとえば、次を選択した場合

sed -i -e 's@\(dataTable\)@'"$replace"' \1@' file.txt

$replace文字列に部分文字列\x(ここではx数字は何でも)または&(式に一致する文字列部分に置き換えられます)が含まれているという問題がまだ発生します。これらの特殊文字列をエスケープする必要があります。

たとえば、参照してください。

特別なケースで、行全体を新しい(静的)コンテンツに置き換えたい場合は、次のようにできます。

printf '%s\n' "$replace" | sed -e '/some pattern/{ r /dev/stdin' -e 'd; }' file.txt

これは一致する行を見つけ、標準入力/some pattern/から代替テキストを読み込みますprintf。次に、前の行を削除します。

関連情報