文字列を含むファイルがあります (1,2,3 は異なります):
{"var": [1,2,3]}
私はそれを次のように置き換えたい:
{"var": [4,5,6]}
私はこれを試します:
sed 's/\{"var": \[.*\]\}/\{"var": \[4,5,6\]\}/g' file.txt
しかし、私はエラーが発生します:
Invalid preceding regular expression
文字列を交換するにはどうすればよいですか?
Sedは、いくつかの珍しいエスケープスタイルを使用しています。(通常は)シンボルをエスケープして「アクティブ」にします。それ以外の場合は、単なる文字です。
したがって、これは適切に機能します(中括弧をエスケープせずに、さらにドットが欠落しています)
sed 's/{"var": \[.*\]\}/\{"var": \[4,5,6\]}/g' file.txt
ただし、そうしないことをお勧めします。適切なjsonパーサーを使用してファイルを開き、変更して、再度保存します。
これを試して :
sed -r 's@(\{"var": \[)[^\]+\]@\14,5,6]}@' file.txt
出力
{"var": [4,5,6]}}
{ }
&正規表現[ ]
の一部のキーワードであるため、バックスラッシュが必要ですsed
-r
を意味します。これにより、バックスラッシュが少なくて済みます。これをチェックしてください:
echo '{"var": [1,2,3]}' | sed 's/{"var": \[.*\]}/\{"var": \[4,5,6\]\}/g
.*
任意の文字の0回以上の出現に一致する必要があります。また、中括弧をエスケープ解除しました。彼らが逃げる必要があるかどうかはわかりません。