sed AWK를 사용하여 시작 패턴과 끝 패턴 사이의 문자열을 추출하는 방법은 무엇입니까?

sed AWK를 사용하여 시작 패턴과 끝 패턴 사이의 문자열을 추출하는 방법은 무엇입니까?

HTML 파일이 있고 패턴 사이의 문자열을 추출하고 싶습니다. 파일은 다음과 같습니다.

<span>aghahan.com</span>
<span>pouyamannequin.com</span>

범위가 포함된 도메인 이름이 필요합니다: aghahan.com, pouyamannequin.com

나는 다음 명령을 사용해 보았습니다.

sed -e 's/>!\(.*\)>.com<\/span>/\1/' domain.txt

그러나 나는 잘못된 결과를 얻고 있습니다. 누구든지 나를 도와주면 감사하겠습니다.

답변1

각 줄은 <span>다음으로 시작하고 끝납니다 </span>.

sed 's|<span>\(.*\)</span>|\1|' domain.txt

awk필드 구분 기호를 <또는 로 설정하고 세 번째 열을 인쇄하여 >이를 수행 할 수도 있습니다.

awk -F '[<>]' '{print $3}' domain.txt

산출:

aghahan.com
pouyamannequin.com

이것은 가장 간단한 방법이며 줄 끝에 공백이 있는 경우에도 작동합니다.

답변2

그리고sed

 sed 's/\(.*\)>\(.*\)<\(.*\)/\2/g' domain.txt

답변3

그리고 :pythonBeautifulSoup

python -c '
from bs4 import BeautifulSoup
f = open("domain.txt", "r")
soup = BeautifulSoup(f.read(),"html.parser")
for span in soup.find_all("span"):
  print(span.string)
'

간단한 작업에는 약간 과잉일 수 있지만 예를 들어 다음과 같은 다른 HTML이 있는 경우 더 어려운 작업에서는 더 잘 작동하고 더 쉬울 것입니다.

<span>
 aghahan.com
</span>
<span>
 pouyamannequin.com
</span>

답변4

awk -F ">" '{print $2}' filename| sed "s/<.*//g"

산출

aghahan.com
pouyamannequin.com

관련 정보