파일이 있습니다. 예:
<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
해당 부분 참조 \(.*\)
)으로 바꿉니다. 물론 이것이 실패하는 이상한 상황을 만들 수도 있습니다.