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

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

相关内容