使用 awk 或 sed 删除顶级域 (TLD) 和二级域 (SLD)

使用 awk 或 sed 删除顶级域 (TLD) 和二级域 (SLD)

我在文本文件中有一个没有子域的域列表。我需要删除 TLD 和 SLD。

输入

google.uk
example.com
amazon.co.uk
domain.ca.uk
education.edu.it

预期输出:

google
example
amazon
domain
education

答案1

为此,您不需要 awk 或 sed,这是cut存在的工作:

$ cut -d'.' -f1 file
google
example
amazon
domain
education

答案2

我找到了我自己问题的答案。原来很简单

awk -F. '{print $1}' input_file
  • 我用 '。'用“-F”作为分隔符。像这样我将 SLD 和 TLD 放在 $2 和/或 $3 列中

  • 使用“{print $1}”我只打印第一列中的文本,这是我需要的输出

答案3

sed "s/\..*//" filename

google
example
amazon
domain
education

匹配\.第一个文字点,及其.*后的所有内容。它们不会s被任何东西替代,因此从第一个点开始的所有内容都被删除。

答案4

使用(以前称为 Perl_6)

~$ raku -ne 'put .split(".")[0];'  input_file

也许 Raku 解决方案会有所帮助:上面是相当接近的代码翻译awk,除了 Raku(和 Perl)是零索引的。使用Raku 的-ne“非自动打印行”命令行标志(对于更多sed类似的行为,请使用 Raku 的-pe命令行标志)。

Raku 提供的命令行开关比 Perl 少,这意味着在该语言中可以完成更多工作(提高代码可移植性)。这里定义字段分隔符,使用它从结果字符串中split破坏性地删除。.那么[0]零索引的第一个元素是putput是“print-using-terminator”的缩写,即在末尾添加换行符)。

输入示例:

google.uk
example.com
amazon.co.uk
domain.ca.uk
education.edu.it

示例输出:

google
example
amazon
domain
education

https://raku.org

相关内容