我在文本文件中有一个没有子域的域列表。我需要删除 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]
零索引的第一个元素是put
(put
是“print-using-terminator”的缩写,即在末尾添加换行符)。
输入示例:
google.uk
example.com
amazon.co.uk
domain.ca.uk
education.edu.it
示例输出:
google
example
amazon
domain
education