텍스트를 찾고 복사하여 파일의 다음 줄에 삽입하려면 어떻게 해야 합니까?

텍스트를 찾고 복사하여 파일의 다음 줄에 삽입하려면 어떻게 해야 합니까?

.xml 파일을 처리하는 스크립트를 작성하려고 합니다. 요소가 포함된 모든 행을 찾아 <title>복사한 다음 찾은 요소 뒤의 다음 행에 붙여넣고 요소 유형도 변경해야 합니다. 여기에 예가 있습니다.

원래:

일부 텍스트
<title>텍스트 1 </title>
일부 텍스트
<title>텍스트 2 </title>
일부 텍스트

이것이 내가 얻어야 할 것입니다:

일부 텍스트
<title>텍스트 1 </title>
<description>텍스트 1 </description>
일부 텍스트
<title>텍스트 2 </title>
<description>텍스트 2 </description>
일부 텍스트

sed나 grep(또는 다른 도구)을 사용하여 수행할 수 있나요?

답변1

sed -E 's%<title>(.*)</title>%<title>\1</title>\n<desc>\1</desc>%g' file.xml숙제를 해야 합니다.

좀 더 설명하자면, -E매개변수는 sed확장 정규식을 사용하도록 지시하므로 따옴표를 사용할 수 있습니다. 일반적으로 sed 형식의 sed로 대체됩니다 s/search/replace/g. 검색 텍스트에 슬래시가 있으므로 sed %대신 /sed를 사용하여 해당 부분을 표시하므로 검색 텍스트에서 슬래시를 백슬래시로 가릴 필요가 없습니다. 나머지는 검색 섹션의 코드 조각을 \1참조하는 교체 섹션이 있는 일반적인 정규식 항목입니다.(…)

답변2

XML 파서/프로세서는 XML 데이터를 조작하는 데 적합한 도구입니다.

xmlstarlet해결책:

데모 input.xml내용:

<root>
some text
<title>text 1</title>
some text
<title>text 2</title>
some text </root>

xmlstarlet ed -a '//title' -t elem -n 'description' -v '' input.xml \
 | xmlstarlet ed -u '//description' -x './preceding-sibling::title[1]/text()'

산출:

<?xml version="1.0"?>
<root>
some text
<title>text 1</title><description>text 1</description>
some text
<title>text 2</title><description>text 2</description>
some text </root>

  • ed- 편집 모드

  • -a- 추가 조치

  • -u- 업데이트 작업

관련 정보