특정 큰따옴표 안의 모든 내용을 수정합니다. 내 작업 예는 다음과 같습니다.
<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="
그 뒤에 0개 이상의 비문자 "
가 오고 그 뒤에 "
"
그래서 이것은 다음과 일치합니다
NORECONNECT="foo"
NORECONENCT="bar"
NORECONNECT=""
그런 다음 해당 부분을 문자열로 바꾸십시오.
NORECONNECT="0"
편집하다:
단어가 한 줄에 여러 번 나타나면 g
끝에 단어를 추가하세요.
sed 's/NORECONNECT="[^"]*"/NORECONNECT="0"/g'