1

私はsed(主にSOの助けを借りて)正規表現を作成して、次の形式のjsonファイルの値を更新しました。

1 -"XXXX" : "YYYY"

また

2 -"XXXX" : "YYYY",

また

3 -"XXXX" : YYYY

また

4 - "XXXX" : YYYY,

また

5 -"XXXX" : "YYYY,ZZZZ"

これが私のsed正規表現です

sed -r 's/("XXXX"\s*:\s*)(")?[^",]*(")?/\1\2YYYY\3/'ファイル

上記の式は、1-4 形式で機能します。

しかし、5の場合、以下のように更新されます。

"XXXX" : "YYYY,ZZZZ""XXXX" : "ZZZZ,ZZZZ"(予想: "XXXX" : "ZZZZ")

私の正規表現の何が問題になっていますか?

ありがとう!

4

3 に答える 3

1

置き換える値について心配していないので、単純なパターンでは十分ではありません

sed -r 's/("XXXX"\s*:\s*).*$/\1"YYYY",/' input

または、引用されたものと引用されていないものを別々に扱うことができます

 sed -r 's/("XXXX"\s*:\s*)((")[^"]*"|[^,]*)/\1\3YYYY\3/' input
于 2013-04-22T08:10:28.003 に答える
1

The ?means 0 or 1. 以前(")?はオプションの引用符をキャプチャしていました。代わりに、この場合、本文部分[^",]*が YYYY,ZZZZ と一致できないため、本文と末尾の引用符がまったく一致しないため (これは許可されています: による本文が*ゼロで、引用符が 0 のため?)、置換は最初の部分でのみ機能します。ラインの一部"XXXX" : "と残りの部分は置き換えられません。

*1 つのアイデアは、 bodyを+requireに置き換えることです。このような混乱を避けるために、行全体に一致することがわかるように、式を^andにバインドすることもできます。$

于 2013-04-22T08:01:00.173 に答える