패턴과 일치하고, 패턴이 발견되면 줄 번호를 기준으로 라벨에 주석을 답니다.

패턴과 일치하고, 패턴이 발견되면 줄 번호를 기준으로 라벨에 주석을 답니다.

내 입력 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위해 일치하는 정규식으로 다음과 같이 사용합니다.$0pattern

awk -v string="$yourMatch" '
    { if(index($0, string)) $0= "<!--" $0 "-->" }1' infile

관련 정보