regex - 如何仅提取包含子域的 URL
问题描述
我的原始文件包含:
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
推荐阅读
- angular - Angular ReactiveForm 将 Form.Value 合并到对象
- selenium - 使用 gherkin 和 specflow 的 BDD 迭代
- php - addnote.php 问题连接到android studio
- javascript - 在 Node.js 中的类中启动并返回一个类
- javascript - 如何删除 Material React Modal 中的蓝色边框?
- python - 从 .loc 查询返回字符串
- hbase - HBase Zookeeper AUTH_FAILED - 找不到任何 Kerberos tgt
- node.js - Sequelize 在 belongsToMany 关联中获取未知列
- html - 根据男性/女性复选框自动更改的 Django 选项。类别将根据性别选择显示
- sql - SQL - 更新多个字段而不是一个