XML 파일이 있는데 파일의 값을 변경하고 싶습니다.
param name=swam_license_ports_overdraft_thresh
99
param name="strike_license_ports_overdraft_thresh"
99
내가 원하는 결과는 param name=swam_license_ports_overdraft_thresh 아래의 값 99가 90으로 변경되고 param name="strike_license_ports_overdraft_thresh" 아래의 다른 값 99는 변경되어서는 안 된다는 것입니다.
답변1
내가 올바르게 이해했다면 첫 번째 일치 항목만 제거하려는 것이므로 다음과 같이 할 수 있습니다.
sed -e '/99/{s//XXX/;:a;n;ba}' file
GNU를 사용하면 sed
다음을 수행할 수 있습니다.
sed -e '0,/99/s//XXX/' file
답변2
첫 번째 일치 항목 제거(행 유지)
awk '!x&&/99/{x++;$0=y}1' file
첫 번째 일치 항목 제거(행을 유지하지 않음)
awk '!x&&/99/{x++;next}1' file
첫 번째 일치 항목 바꾸기
awk '!x&&/99/{x++;$0="98"}1' file
답변3
sed -n 'h;/match/n;G;P;//D'
첫 번째 항목만 삭제됩니다.성냥모든 입력 파일에서. 그것
h
각 행은 기존 공간을 덮습니다.다음 입력으로 패턴 공간 덮어쓰기성냥철사
G
ets는 패턴 공간에 추가된 공간을 예약합니다.P
\n
패턴 공간에서 처음으로 나타나는 ewline 문자 까지 인쇄합니다.D
동일한 요소성냥철사
그런데 문제는 이 과정이모든첫 번째 발생 이후의 행성냥또한 된다성냥다음 줄에 도달하기 전에. 따라서 항상 일치하고 인쇄되지 않습니다.
sed '/match/x;//x'
이 값은 다음의 첫 번째 항목을 대체합니다.성냥빈 줄이 있는 파일.
존재하다성냥
sed
e라인은 기존 공간과 패턴 공간을x
변화시킨다 .h
새로운 패턴 공간이라면(오래된 패턴 공간)반품성냥그게
x
또 바뀌네그렇지 않으면 첫 번째 발생을 그대로 유지합니다.성냥신구
h
공간과 인쇄 여백 패턴 공간에