공백이 있는 Grep 텍스트

공백이 있는 Grep 텍스트

검색해서 이 두 가지 주제를 찾았는데 공백 수가 고정되어 있기 때문에 서로 다릅니다. 반면 제 샘플에는 공백 수가 고정되어 있지 않습니다.

https://stackoverflow.com/questions/47428445/i-want-grep-to-grep-one-word-which-is-having-spaces-it

https://askubuntu.com/questions/949326/how-to-include-a-space-character-with-grep

예시 텍스트:

<span>Section 1: Plan your day, write out your plan</span>

원하는 출력:

Section 1: Plan your day, write out your plan

HTML 태그가 아닌 텍스트만 grep하고 싶습니다. 이것이 나의 시도이다.

wolf@linux:~$ cat file.txt 
<span>Section 1: Plan your day, write out your plan</span>
wolf@linux:~$ 

wolf@linux:~$ grep -oP 'S\S+ \d: \S+' file.txt 
Section 1: Plan
wolf@linux:~$ 

wolf@linux:~$ grep -oP 'S\S+ \d: \S+ \S+' file.txt 
Section 1: Plan your
wolf@linux:~$ 

\S+텍스트의 길이가 다르기 때문에 하나씩 정의하는 것보다 더 나은 솔루션이 있습니까?

답변1

확장 정규 표현식을 사용하여 Section키워드를 고정하고 뒤에 오지 않는 모든 항목을 가져옵니다 <.

$ grep -E -o 'Section [0-9]+:[^<]*' < file.txt
Section 1: Plan your day, write out your plan

Perl을 사용하여 주변 부분을 고정하는 것이 가장 쉬운 방법이므로 이것이 옵션인 경우:

$ perl -lne 'print $1 if m,<span>(Section \d+:.*?)</span>,' < file.txt
Section 1: Plan your day, write out your plan

(유사한 작업을 수행하는 데 사용할 수 있는 몇 가지 방법이 있지만 grep -P읽기가 약간 어렵습니다.)

답변2

HTML이 유효한 XML인 경우 xmlstarlet이를 사용하여 적절한 요소 값을 선택할 수 있습니다.

xmlstarlet sel -t -v '//span' -n file.html
Section 1: Plan your day, write out your plan

더 많은 페이지 구조 없이는 더 나은 XPath()를 제공할 수 없습니다 //span. 하지만 예 spandiv들어 //div/span.

답변3

sum 이외의 문자 시퀀스와 일치시키려는 것 같으니 다음과 같이 <하십시오 .> <number>:

grep -Po '[^<>]* \d+:[^<>]*'

답변4

Perl Look(ahead|behind)이 도움이 될 수 있습니다:

grep -Po "(?<=>).+(?=</)" yourfile

이는 html 태그 사이의 모든 항목과 일치하고 해당 태그를 제거합니다.

관련 정보