파일에서 >STRING< 사이의 값을 찾아야 합니다.

파일에서 >STRING< 사이의 값을 찾아야 합니다.

파일이 있습니다. 예:

    <hello>TestFile</hello>
    <test>2018-04-30</test>
    <greetings>mycomputer</greetings>
    **<Iwanthis>6.1.0</Iwanthis>**
    <example>20180411</example>
    blah blah

6.1.0(이 경우 6.1.0) 사이의 값을 찾고 있습니다.

XXXX 값을 얻기 위해 파일을 grep하는 방법이 있습니까?

답변1

물론 XML 파일처럼 보입니다. 루트 주석을 추가하고 XML 파서를 사용합니다.

$ { echo '<r>'; cat file; echo '</r>'; } | xmlstarlet sel -t -v //Iwanthis
6.1.0

답변2

줄에 시작 태그와 끝 태그가 있을 것이라고 신뢰할 수 있는 경우 이를 다음 필드의 구분 기호로 사용할 수 있습니다 awk.

awk -F "</*Iwanthis>" '(NF > 1){print $2}' yourfile

이것은 많은 인위적인 상황에서 실패합니다. 더 엄격하게 사용하려면 다음을 사용할 수 있습니다 sed.

sed -n 's_.*<Iwanthis>\(.*\)</Iwanthis>.*_\1_p' yourfile

-n일치하는 줄에서만 출력을 얻을 수 있도록 기본 출력을 억제합니다 . s슬래시를 벗어나지 않도록 명령의 구분 기호 로 밑줄을 선택했습니다 . 이 s명령은 전체 줄을 여는 태그와 닫는 태그 사이의 부분( \1해당 부분 참조 \(.*\))으로 바꿉니다. 물론 이것이 실패하는 이상한 상황을 만들 수도 있습니다.

관련 정보