0

その場合、すべての「ステータス」列の特殊文字の前のすべてを変更したい:

{"name":0.main","tablespace":"UNDO","size":"500","maxsize":"65536","usedsize":"29","status":.04}, {"name":0.main","tablespace":"REDO","size":"500","maxsize":"65536","usedsize":"29","status":0},

その場合、.04 を 0.04 に変更したいと思います。私はsedで試しました:

sed 's/:./:0./g'

しかし、2 行目の結果は "0" を示しています。ステータス欄に。

status 列のみを変更し、 .anynumber を含むすべてを0.anynumberに置き換えるにはどうすればよいですか?

4

4 に答える 4

4

を使用して特定のフィールドに変更.[digit]*します。0.[digit]*

sed -r 's/("status":)(\.[0-9]+)/\10\2/' file
$cat ファイル
{"name":0.main","tablespace":"UNDO","size":"500","maxsize":"65536","usedsize":"29","status":.04},
{"name":0.main","tablespace":"REDO","size":"500","maxsize":"65536","usedsize":"29","status":0},

$sed -r 's/("status":)(\.[0-9]+)/\10\2/' ファイル
{"name":0.main","tablespace":"UNDO","size":"500","maxsize":"65536","usedsize":"29","status":0.04},
{"name":0.main","tablespace":"REDO","size":"500","maxsize":"65536","usedsize":"29","status":0},
于 2013-06-20T12:45:18.193 に答える
3

awkここの方が適していると思います。入力はコンマで区切られ、キーと値のペアstatusは 6 番目のフィールド"status":.04です。次のスクリプトでは、置換は必要なフィールドでのみ行われ、すべて:.を置き換えます。:0.つまり、以前に存在しない場合はすべての 10 進数値に先行ゼロがあることを確認します。

$ awk '{sub(/:[.]/,":0.",$6)}1' FS=, OFS=, file
于 2013-06-20T12:50:51.733 に答える
1

GNU sedでこれを試してください。

sed 's/\(.*status":.*\)\(\.[0-9]\+\)/\10\2/' file.txt

この変更を元のファイルに反映させたい場合は、

sed -i.bak 's/\(.*status":.*\)\(\.[0-9]\+\)/\10\2/' file.txt
于 2013-06-20T12:30:39.380 に答える