셸을 사용하여 다른 파일에서 입력을 받아 파일의 문자열 바꾸기

셸을 사용하여 다른 파일에서 입력을 받아 파일의 문자열 바꾸기

다음 내용이 포함된 XML 파일이 있습니다.

<SummaryRecordMapping>
<eName>Licensed Original MC TPE EXCESSIVE AUTH</eName>
<jobs>
<job>

<SummaryRecordMapping>
<eName>Licensed Reversal MC TPE EXCESSIVE AUTH</eName>
<jobs>
<job>

그 중 , <eName>Licensed Original, </eName><eName>Licensed Reversal정적이다.

나는 다음과 같은 출력을 원한다

<SummaryRecordMapping>
<eName>Licensed Original MC This is New Deep</eName>
<jobs>
<job>

<SummaryRecordMapping>
<eName>Licensed Reversal MC This is New Deep</eName>
<jobs>
<job>

<SummaryRecordMapping>
<eName>Licensed Original MC This is Mayurika</eName>
<jobs>
<job>

<SummaryRecordMapping>
<eName>Licensed Reversal MC This is Mayurika</eName>
<jobs>
<job>

아래는 내 코드입니다

#!/bin/bash
while read whole_line ;
do
name=`echo "$whole_line" | awk '{$1=""; print}'`
LO="<eName>Licensed Original MC ${name}</eName>"
awk -v diff="$LO" '{ if(NR==2) { print diff}
                              else {print $0} } ' southBalanceRecon.xml >>LO.xml

LR="<eName>Licensed Reversal MC ${name}</eName>"
awk -v diff="$LR" '{ if(NR==14) { print diff}
                              else {print $0} } ' LO.xml >> LR.xml
done < file.txt

내 file.txt에는 다음 내용이 포함되어 있습니다.

C71 This is New Deep
C72 This is Mayurika

코드를 실행하려고 하면 위에서 언급한 결과가 나오지 않습니다. 누구든지 내 코드에 어떤 문제가 있는지 말해 줄 수 있나요?

답변1

이 시도,

while IFS= read -r line; do
    NAME="`echo "$line" | awk '{$1=""; print}'`"
    sed "s#^<eName>Licensed Original.*</eName>#<eName>Licensed Original$NAME</eName>#;s#^<eName>Licensed Reversal.*</eName>#<eName>Licensed Reversal$NAME</eName>#" LO.xml >> LR.xml
done < input.txt

답변2

이 솔루션에 대해 어떻게 생각하시나요?

sed -i -E -e "s/(Original|Reversal) .*</\1$(sed '1q;d' file.txt)</" -e 's/C[0-9]*//' file.xml

text="$(cat foo)" && echo "$text" \
| sed -E -e "s/(Original|Reversal) .*</\1$(sed '2q;d' file.txt)</" -e 's/C[0-9]*//' >> file.xml

패턴은 Origina|Reversal다음까지 발견됩니다.<

sed -i -E -e "s/(Original|Reversal) .*</

첫 번째 줄로 바꾸기file.txt

    /\1$(sed '1q;d' file.txt)</" -e 's/C[0-9]*//' file.xml

xml 파일의 내용을 복사하고 작업을 반복합니다. 이번에는 두 번째 줄을 사용 file.txt하고 출력을 xml 파일에 추가합니다.

text="$(cat foo)" && echo "$text" \
| sed -E -e "s/(Original|Reversal) .*</\1$(sed '2q;d' file.txt)</" -e 's/C[0-9]*//' >> file.xml

관련 정보