![sed AWK를 사용하여 시작 패턴과 끝 패턴 사이의 문자열을 추출하는 방법은 무엇입니까?](https://linux55.com/image/169874/sed%20AWK%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%8B%9C%EC%9E%91%20%ED%8C%A8%ED%84%B4%EA%B3%BC%20%EB%81%9D%20%ED%8C%A8%ED%84%B4%20%EC%82%AC%EC%9D%B4%EC%9D%98%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EC%B6%94%EC%B6%9C%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
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
그리고 :python
BeautifulSoup
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