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フィールド区切り文字を<またはに設定し、3番目の列を印刷して>これを行うこともできます。

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

関連情報