sed에서 다음 오류가 발생했습니다. ...알 수 없는 명령: `

sed에서 다음 오류가 발생했습니다. ...알 수 없는 명령: `

특정 줄 번호에서 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 을 포함 하는 <!--줄 앞에 문자열을 삽입하려면 다음과 같이 사용하세요.Deepsed

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

관련 정보