파일에서 특정 XML 태그가 나타날 때마다 개행 문자를 삽입하려면 어떻게 해야 합니까?

파일에서 특정 XML 태그가 나타날 때마다 개행 문자를 삽입하려면 어떻게 해야 합니까?

파일에서 특정 XML 태그가 나타날 때마다 개행 문자를 삽입하려면 어떻게 해야 합니까?

</Data>내 파일에 태그가 여러 개 있고 각 태그 뒤에 줄바꿈을 삽입 하고 싶습니다.</Data>

나는 다양한 조합을 시도했지만 sed결코 개행 문자를 삽입하지 않습니다 :(

최신은sed '/<\/Data\>/ a \n'

감사해요!

답변1

sed 's:</Data>:&\
:g'

$'\<char>'또는 확장된 이스케이프 시퀀스를 지원하는 bash 또는 다른 쉘에서 sed를 호출하는 경우 :

sed 's:</Data>:&\'$'\n'':g'

또는 GNU를 사용하십시오 sed:

sed 's:</Data>:&\n:g'

예를 들어:

$ printf 'foo</Data>bar</Data>etc\n'
foo</Data>bar</Data>etc
$
$ printf 'foo</Data>bar</Data>etc\n' | sed 's:</Data>:&\n:g'
foo</Data>
bar</Data>
etc

답변2

이것은 가장 우아하지는 않지만 작동합니다.

sed 's/\(<\/Data>\)/\1\n/ig'

답변3

sed '/<\/Data>/ a \\n'개행 문자가 삽입되지만 문자열이 한 줄에 여러 번 존재하는 경우(일반적인 xml은 긴 줄일 수 있음) 각 항목 뒤에 개행 문자를 추가하는 대신 그 뒤에 개행 문자를 추가합니다.

각 발생 후에 실제로 래핑을 수행하려면 sed 's/\(<\/Data>\)/\1\n/g'이렇게 해야 합니다.

답변4

파이썬으로 시도해 보았습니다.

cat inputfile

san</Data>abhi</Data>san

파이썬

#!/usr/bin/python
g="</Data>"
import re
k=open('k.txt','r')
for i in k:
    m="{0}".format(g+"\n")
    q=re.sub(g,"{0}",i).format(m)
    print q

산출

san</Data>
abhi</Data>
san

관련 정보