二重引用符内の特定のフィールドテキストを変更する

二重引用符内の特定のフィールドテキストを変更する

特定の二重引用符内のすべての内容を変更します。私の仕事の例は次のとおりです。

<VALUE MAP_ID="1001" MAP="0" MAPNAME="BichonTown" SERVER="0" CHNSERVER="0" NEEDLEVEL="7" TIME="0" WEATHER="0" VEHICLE="1" PVP="0" MINE="0" CONTROL="" ENTERLV="0" ENTERQUEST="0" ENTERITEM="0" NORECONNECT="DQ_910" MINIMAP="1001" VER="200" APPLY_ROW="0" MAP_EXP_RATIO="0" MAP_DROP_RATIO="0" MAP_MONEY_RATIO="0" ORDERLIST="0" /><VALUE MAP_ID="1002" MAP="0_000" MAPNAME="TownHall" SERVER="1" CHNSERVER="1" NEEDLEVEL="0" TIME="1" WEATHER="0" VEHICLE="0" PVP="1" MINE="0" CONTROL="" ENTERLV="0" ENTERQUEST="0" ENTERITEM="0" NORECONNECT="5515" MINIMAP="0" VER="200" APPLY_ROW="0" MAP_EXP_RATIO="0" MAP_DROP_RATIO="0" MAP_MONEY_RATIO="0" ORDERLIST="0" /><VALUE MAP_ID="1003" MAP="0_001" MAPNAME="TownHall" SERVER="1" CHNSERVER="1" NEEDLEVEL="0" TIME="1" WEATHER="0" VEHICLE="0" PVP="1" MINE="0" CONTROL="" ENTERLV="0" ENTERQUEST="0" ENTERITEM="0" NORECONNECT="0" MINIMAP="0" VER="200" APPLY_ROW="0" MAP_EXP_RATIO="0" MAP_DROP_RATIO="0" MAP_MONEY_RATIO="0" ORDERLIST="0" /><VALUE MAP_ID="1004" MAP="0_002" MAPNAME="TownHall" SERVER="1" CHNSERVER="1" NEEDLEVEL="0" TIME="1" WEATHER="0" VEHICLE="0" PVP="1" MINE="0" CONTROL="" ENTERLV="0" ENTERQUEST="0" ENTERITEM="0" NORECONNECT="221" MINIMAP="0" VER="200" APPLY_ROW="0" MAP_EXP_RATIO="0" MAP_DROP_RATIO="0" MAP_MONEY_RATIO="0" ORDERLIST="0" /><VALUE MAP_ID="1005" MAP="1" MAPNAME="LostParadise" SERVER="1" CHNSERVER="1" NEEDLEVEL="7" TIME="0" WEATHER="0" VEHICLE="1" PVP="0" MINE="0" CONTROL="" ENTERLV="0" ENTERQUEST="0" ENTERITEM="0" NORECONNECT="11" MINIMAP="1002" VER="200" APPLY_ROW="0" MAP_EXP_RATIO="0" MAP_DROP_RATIO="0" MAP_MONEY_RATIO="0" ORDERLIST="0" />

内部のすべての項目にはスペースがなく、文字、数字、または下線のみを含めるようにNORECONNECT=""設定する必要があります。0結果は次のとおりです。

<VALUE MAP_ID="1001" MAP="0" MAPNAME="BichonTown" SERVER="0" CHNSERVER="0" NEEDLEVEL="7" TIME="0" WEATHER="0" VEHICLE="1" PVP="0" MINE="0" CONTROL="" ENTERLV="0" ENTERQUEST="0" ENTERITEM="0" NORECONNECT="0" MINIMAP="1001" VER="200" APPLY_ROW="0" MAP_EXP_RATIO="0" MAP_DROP_RATIO="0" MAP_MONEY_RATIO="0" ORDERLIST="0" /><VALUE MAP_ID="1002" MAP="0_000" MAPNAME="TownHall" SERVER="1" CHNSERVER="1" NEEDLEVEL="0" TIME="1" WEATHER="0" VEHICLE="0" PVP="1" MINE="0" CONTROL="" ENTERLV="0" ENTERQUEST="0" ENTERITEM="0" NORECONNECT="0" MINIMAP="0" VER="200" APPLY_ROW="0" MAP_EXP_RATIO="0" MAP_DROP_RATIO="0" MAP_MONEY_RATIO="0" ORDERLIST="0" /><VALUE MAP_ID="1003" MAP="0_001" MAPNAME="TownHall" SERVER="1" CHNSERVER="1" NEEDLEVEL="0" TIME="1" WEATHER="0" VEHICLE="0" PVP="1" MINE="0" CONTROL="" ENTERLV="0" ENTERQUEST="0" ENTERITEM="0" NORECONNECT="0" MINIMAP="0" VER="200" APPLY_ROW="0" MAP_EXP_RATIO="0" MAP_DROP_RATIO="0" MAP_MONEY_RATIO="0" ORDERLIST="0" /><VALUE MAP_ID="1004" MAP="0_002" MAPNAME="TownHall" SERVER="1" CHNSERVER="1" NEEDLEVEL="0" TIME="1" WEATHER="0" VEHICLE="0" PVP="1" MINE="0" CONTROL="" ENTERLV="0" ENTERQUEST="0" ENTERITEM="0" NORECONNECT="0" MINIMAP="0" VER="200" APPLY_ROW="0" MAP_EXP_RATIO="0" MAP_DROP_RATIO="0" MAP_MONEY_RATIO="0" ORDERLIST="0" /><VALUE MAP_ID="1005" MAP="1" MAPNAME="LostParadise" SERVER="1" CHNSERVER="1" NEEDLEVEL="7" TIME="0" WEATHER="0" VEHICLE="1" PVP="0" MINE="0" CONTROL="" ENTERLV="0" ENTERQUEST="0" ENTERITEM="0" NORECONNECT="0" MINIMAP="1002" VER="200" APPLY_ROW="0" MAP_EXP_RATIO="0" MAP_DROP_RATIO="0" MAP_MONEY_RATIO="0" ORDERLIST="0" />

この目標をどのように達成できますか?

答え1

これはXMLのように見えます。正規表現を使用しないでください編集するには、実際のXMLパーサーを使用してください。xmlstarlet:

xml ed -u '//VALUE/@NORECONNECT' -v 0 file.xml

答え2

"フィールドに含まれる文字がないと仮定すると、次のツールを使用してこれを実行できます。sed

sed 's/NORECONNECT="[^"]*"/NORECONNECT="0"/'

最初の式は match を表し、NORECONNECT="その後にゼロ個以上の非文字"が続き、その後に"

だからこれは

NORECONNECT="foo"
NORECONENCT="bar"
NORECONNECT=""

次に、その部分を文字列に置き換えます。

NORECONNECT="0"

編集する:

単語が1行に複数回表示される場合は、g最後に単語を追加してください。

sed 's/NORECONNECT="[^"]*"/NORECONNECT="0"/g'

関連情報