특정 줄 번호에서 xml 태그를 대체하는 코드가 있습니다.
LineNum=`grep -n "Deep" file.xml | cut -d: -f 1 | awk -F '[\t]' '{$NF = $NF -1;}1'`
sed "${LineNum}s#^<Deep>#<!--<Deep>#" file.xml
명령을 실행하는 동안 다음 예외가 발생했습니다.
sed -e expression #1, char 7: unknown command `'
누구든지 이 문제에 대한 해결책을 제공할 수 있습니까?
답변1
분명히 행 중심이 아닌 XML 중심의 데이터를 편집하기 위해 행 중심 도구를 사용하고 있다는 사실을 무시하십시오.
string 을 포함 하는 <!--
줄 앞에 문자열을 삽입하려면 다음과 같이 사용하세요.Deep
sed
sed '/Deep/ s/^/<!--/' file.xml >newfile.xml
grep
내가 아는 한, 먼저 다른 도구를 사용하여 줄 번호를 계산할 필요는 없습니다.
<!--
줄 시작 부분에 문자열을 삽입 하시겠습니까 ?이상줄에 무엇이 포함되어 있든 Deep
다음을 사용하십시오.
sed -e '1 { h; d; }' -e '/Deep/ { x; s/^/<!--/; x; }' -e x -e '$ { p; x; }' file.xml >newfile.xml
또는 파일이 메모리에 쉽게 들어갈 수 있으면 편집기 ed
스크립트를 작성하십시오(실제로는 이것이 가장 유연한 접근 방식일 것입니다).
printf '%s\n' 'g/Deep/-1 s/^/<!--/' 'w newfile.xml' 'q' | ed -s file.xml
답변2
이것이 도움이 됩니까?
LineNum=$(grep -n "Deep" file.xml | cut -d: -f 1 | awk -F '[\t]' '{$NF = $NF -1;}1')
그런 다음 sed 라인을 실행하십시오(또는 해당 라인도 조정할 수 있습니다):
sed $LineNum 's#^<Deep>#<!--<Deep>#g' > file.xml