我有 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
您还可以通过将字段分隔符设置为<
or>
并打印第三列来实现此目的:
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