我无法理解代码:ls -l /projects/ghosttrail | tail -n +2 | sed 's/\s\s*/ /g' | cut -d ' ' -f 3 | sort | uniq -c
。有人能给我详细解释每一步发生的事情吗?我知道我可以通过一一添加每个命令来自己完成,但是代码对我不起作用,而且我无法理解一些事情,例如尾部+2参数的含义,或者我们通过将 sed 命令和为什么我们不采用 cut 命令中的第四列。
答案1
管道的步骤,上一个命令的输出用作下一个命令的输入:
ls -l /projects/ghosttrail
列出目录内容(不以点开头)及其详细信息。tail -n +2
输出从第 2 行开始(删除第一行)。没有+
,tail
将显示最后两行(由 指定的行数-n
,默认 10)。sed 's/\s\s*/ /g'
将多个连续空格替换为单个空格。cut -d ' ' -f 3
获取第三个字段(用户名)。sort | uniq -c
对独特的行进行排序和计数。sort
使用它是因为uniq
不会检测重复的行,除非它们是相邻的,如中所述man uniq
。
使用 GNU 获得相同结果的另一种方法find
:
find . -maxdepth 1 -not -name '.*' -printf '%u\n' | sort | uniq
find
-printf '%u\n'
列出工作目录中的用户名(选项)。-maxdepth 1
防止搜索子目录。-not -name '.*'
不包括点文件。sort | uniq
与原始示例具有相同的目的。