解释

解释

如何使用 grep 搜索/etc/services并仅输出名称以 结尾的服务的行s

答案1

cut -f1 /etc/services | grep -v '^#' | grep 's$'

或者

cut -f1 /etc/services | grep '^[^#].*s$'

解释

  1. 该文件/etc/services包含多个列,而服务名称是第一列。要打印使用制表符 ( \t) 的文件的第一列,请使用cut -f1(f代表F领域)。

  2. 文件中还有以符号开头的注释#。该命令grep -v '^#'会将它们过滤掉。

    • -v打印行不是包含模式,
    • ^表示行的开头。
  3. 现在我们获得了可以使用进行简单过滤的服务列表grep 's$'

    • $表示行的结尾。

备择方案

  • 这两个grep调用可以合并为一个:grep '^[^#].*s$'。此正则表达式查找满足以下所有规则的行:
    • 不是以 开头#(更准确地说:以不等于( )^的字符开头 ( )#[^#]
    • 后跟未指定数量的任意字符 ( .*) 和
    • s在行尾之前拥有权利( $)。
  • 这些命令sedawk可以完成这项工作。

处理重复项

您可能会发现服务名称被列出多次,因为它们使用多个端口。(此信息包含在我们已过滤掉的第二列中。)有一个命令可以同时按字母顺序打印每个项目一次:sort --unique。只需将上一个命令的输出通过管道传输到sort

cut -f1 /etc/services | grep '^[^#].*s$' | sort --unique

也可以看看

答案2

grep "s$" /etc/services就是答案。

你可以通过阅读手册找到答案,man grep在终端中,或者在网上搜索它。

相关内容