有人可以向我解释以下管道吗?
我正在尝试过滤服务中的端口列表,以便仅列出唯一的端口名称。 doexpand
和do到底是什么tr
,以及使用 with 的正则表达式有什么作用egrep
?
expand regexAufgabe | egrep -v '^#|^$' | tr -s ' ' | cut -d ' ' -f2 | cut -d / -f2 | sort | uniq
答案1
该expand
实用程序将文件中的制表符转换为空格,即“将制表符扩展为空格”。管道首先对名为 的文件的内容执行此操作regexAufgabe
。看man expand
。
然后该egrep
实用程序与选项-v
和正则表达式一起使用^#|^$
。该-v
选项否定了测试的意义,这意味着egrep
将输出执行此操作的每一行不是匹配给定的正则表达式。正则表达式匹配以#
字符开头或空的行。这意味着管道中的第二步将删除以 开头的空行#
。
该tr
实用程序通常用于将一组字符转换为另一组字符,但管道使用它来将多个连续空格“挤压”在一起为单个空格。看man tr
。
cut
然后用于提取结果数据集中的第二个空格分隔字段,然后/
从中提取第二个空格分隔字段。
管道的最后两个阶段sort | uniq
可以编写为单个命令sort -u
。这会对数据进行排序并删除重复项。
简而言之,您有一个管道,可以用(单个)空格替换制表符(并将多个空格压缩为一个),删除空行和注释掉的行。然后,它从每行的第二个空格分隔字段中挑选出唯一的第二个/
空格分隔字段。