1

文字列を含むファイルがあります (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

文字列を交換するにはどうすればよいですか?

4

3 に答える 3

1

Sedは、いくつかの珍しいエスケープスタイルを使用しています。(通常は)シンボルをエスケープして「アクティブ」にします。それ以外の場合は、単なる文字です。

したがって、これは適切に機能します(中括弧をエスケープせずに、さらにドットが欠落しています)

sed 's/{"var": \[.*\]\}/\{"var": \[4,5,6\]}/g' file.txt

ただし、そうしないことをお勧めします。適切なjsonパーサーを使用してファイルを開き、変更して、再度保存します。

于 2012-10-18T21:43:39.570 に答える
0

これを試して :

sed -r 's@(\{"var": \[)[^\]+\]@\14,5,6]}@' file.txt

出力

{"var": [4,5,6]}}
  • { }&正規表現[ ]の一部のキーワードであるため、バックスラッシュが必要ですsed
  • 正規表現の拡張-rを意味します。これにより、バックスラッシュが少なくて済みます。
于 2012-10-18T21:42:46.933 に答える
0

これをチェックしてください:

echo '{"var": [1,2,3]}' | sed 's/{"var": \[.*\]}/\{"var": \[4,5,6\]\}/g

.*任意の文字の0回以上の出現に一致する必要があります。また、中括弧をエスケープ解除しました。彼らが逃げる必要があるかどうかはわかりません。

于 2012-10-18T21:43:29.140 に答える