gpt4 book ai didi

regex - 如何仅提取包含子域的 URL

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:03:27 24 4
gpt4 key购买 nike

我的原始文件包含:

mail.google.com
srv1.mail.google.com
google.com
facebook.com
yahoo.com
tt.twitter.com
yy.notexist

我想提取包含子域的行。它们是:

mail.google.com
srv1.mail.google.com
tt.twitter.com

我试过这个正则表达式:

grep -P '^.[^.]+\.(.[^.])+\..[^.]+$' test.csv

但它只给出:

mail.google.com

我不明白为什么它看不到其余部分。我不确定我的正则表达式是否完美并捕获所有情况。我不确定如何表达(除点以外的任何字符),我使用 ^.[^.] 在正则表达式中表达它。你能纠正我吗?

最佳答案

基于给定样本输入/输出的答案,没有智能来区分什么是顶级域

$ awk -F. 'NF>2 || $NF!="com"' ip.txt
mail.google.com
srv1.mail.google.com
tt.twitter.com
yy.notexist

$ # any domain, not just .com
$ awk -F. 'NF>2' ip.txt
mail.google.com
srv1.mail.google.com
tt.twitter.com
  • -F. 设置.为输入域分隔符
    • 某些版本可能需要 -F'[.]' 而不是 -F.
  • NF>2 || $NF!="com" 如果超过 2 个字段或者最后一个字段不是 com
  • 则打印行


使用 grep

$ grep -xv '[^.]*\.com' ip.txt
mail.google.com
srv1.mail.google.com
tt.twitter.com
yy.notexist

$ # any domain, not just .com
$ grep -xv '[^.]*\.[^.]*' ip.txt
mail.google.com
srv1.mail.google.com
tt.twitter.com
  • -x 只匹配整行
  • -v 打印不匹配给定正则表达式的行
  • [^.]*. 字符
  • \.com 匹配 .com

关于regex - 如何仅提取包含子域的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51908994/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com