私のスクリプトで次のコマンドを試しましたが、エラーが発生しました。
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
。次に、前の行を削除します。