내 입력 XML 파일은 다음과 같습니다
XML 파일 입력
<Formula>
<Name>Total Hate Fee</Name>
<Code>1234>
<Job>BO</Job>
<Type>sub</Type>
</Formula>
<Formula>
<Name>Total BO Fee</Name>
<Code>1234>
<Job>BO</Job>
<Type>sub</Type>
</Formula>
<Formula>
<Name>Total BO Fee</Name>
<Code>1234>
<Job>BO</Job>
<Type>sub</Type>
</Formula>
내 쉘 스크립트에서 "Total Hate Fee" 패턴을 검색하고 해당 패턴이 발견되면 추가된 특정 줄 <!--
과 -->
패턴이 일치하는 부분에만 주석을 달고 출력이 아래와 같이 보이도록 하고 싶습니다.
출력 XML 파일
<Formula>
<--<Name>Total Hate Fee</Name>-->
<Code>1234>
<Job>BO</Job>
<Type>sub</Type>
</Formula>
<Formula>
<Name>Total BO Fee</Name>
<Code>1234>
<Job>BO</Job>
<Type>sub</Type>
</Formula>
<Formula>
<Name>Total BO Fee</Name>
<Code>1234>
<Job>BO</Job>
<Type>sub</Type>
</Formula>
누구든지 이 문제를 해결하도록 도와줄 수 있나요? 도구를 사용하고 싶지 않습니다 xmlstartet
. 대신 쉘 스크립트를 사용하고 싶습니다
답변1
거의 다 왔습니다. 방금 ed 코드의 두 번째 줄을 추가했는데 일치하는 줄 아래에 4줄이 있는 것 같습니다.
printf '%s\n' \
'g/Total Hate Fee/-1 s/^/<!--/' \
'g/Total Hate Fee/+4 s/$/-->/' \
'w newfile.xml' 'q' \
| ed -s file.xml;
답변2
awk -v pattern="$yourMatch" '
$0 ~ pattern{ $0= "<!--" $0 "-->" }1' infile
위의 문자열 로 사용하기 pattern
위해 일치하는 정규식으로 다음과 같이 사용합니다.$0
pattern
awk -v string="$yourMatch" '
{ if(index($0, string)) $0= "<!--" $0 "-->" }1' infile