Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
grep regex检查行是否包含子域_Regex_String_Ubuntu_Search_Grep - Fatal编程技术网

grep regex检查行是否包含子域

grep regex检查行是否包含子域,regex,string,ubuntu,search,grep,Regex,String,Ubuntu,Search,Grep,我有一个包含域名的文件。我想搜索并删除子域的行。子域包含多个点(.)。示例: 子域:ab.cd.fg或ab.cd.fg.hi。 完整域包含一个点:ab.cd 我不确定我的正则表达式是否正确,是否会捕获任何子域,尽管有点: grep '.\..(\..)+' myfile.csv 以上是我尝试搜索包含子域的行。如何删除它们并将新的筛选结果保存到新文件中 样本输入: ab.cd.fg ab.cd ab.cd.fg.hi.jk 输出应该是一个文件,从带有子域的行中清除,子域是带有一个点的行 ab.

我有一个包含域名的文件。我想搜索并删除子域的行。子域包含多个点(.)。示例: 子域:
ab.cd.fg
ab.cd.fg.hi
。 完整域包含一个点:
ab.cd

我不确定我的正则表达式是否正确,是否会捕获任何子域,尽管有点:

grep '.\..(\..)+' myfile.csv
以上是我尝试搜索包含子域的行。如何删除它们并将新的筛选结果保存到新文件中

样本输入:

ab.cd.fg
ab.cd
ab.cd.fg.hi.jk
输出应该是一个文件,从带有子域的行中清除,子域是带有一个点的行

ab.cd
这就是工作:

grep -P '^[^.]+\.[^.]+$' input_file
在哪里

  • -P
    :perl正则表达式
  • ^
    :行首
  • [^.]+
    :1个或多个非点字符
  • \.
    :一个点
  • [^.]+
    :1个或多个非点字符
  • $
    :行尾

请在您的问题中添加样本输入和该样本输入所需的输出。据我所知,您需要
grep-v'\..*\.
awk-F.'NF==2'
。。。某处有一个副本你的要求不完整
yahoo.co.uk
poughkeepsie.k12.ny.us
是各自层次结构中的顶级域。此正则表达式中的任何内容都不需要
-P
选项,这是非标准的,因此不完全可移植。去掉这个选项。@tripleee:如果没有
-P
,它对我不起作用。(Virtualbox中的LinuxMint)您需要
-E
,或者反斜杠。
-E
选项在POSIX中定义,可广泛移植。但是,是的,对不起,我忽略了一个事实,那就是你使用了
+
(这是在
egrep
中引入的)而不是
*
(这是汤普森最初的
grep
)。@tripleee:好的。