我刚刚调用了这个命令ls -l | tail +3
。首先,ls -s 生成 3 行,在第一行添加管道条,然后在单独的行上打印每个文件名。它是如何做到的?这没有意义。
另外,我认为 tail filename 会显示最后 10 行。+
(和减号) 在该等式中起什么作用?
头部也是一样吗?它是如何工作的?
答案1
来自tail
手册页:
这尾巴实用程序显示的内容文件或者,默认情况下,将其标准输入到标准输出。
显示从输入中的字节、行或 512 字节块位置开始。带有前导加号 (“+”) 的数字相对于输入的开头,例如,“-c +2”从输入的第二个字节开始显示。带有前导减号 (“-”) 或没有明确符号的数字相对于输入的结尾,例如,“-n 2”显示输入的最后两行。默认起始位置为“-n 10”,即输入的最后 10 行。
因此,对于您来说,tail +3
(-n
隐含的)表示从输入的第 3 行开始(ls -l
)并打印其余部分。例如:
ls -l
输出:
total 0
-rw-r--r-- 1 carl staff 0 Oct 28 13:18 file1
-rw-r--r-- 1 carl staff 0 Oct 28 13:18 file2
-rw-r--r-- 1 carl staff 0 Oct 28 13:18 file3
-rw-r--r-- 1 carl staff 0 Oct 28 13:18 file4
-rw-r--r-- 1 carl staff 0 Oct 28 13:18 file5
-rw-r--r-- 1 carl staff 0 Oct 28 13:18 file6
ls -l | tail +3
输出:
-rw-r--r-- 1 carl staff 0 Oct 28 13:18 file2
-rw-r--r-- 1 carl staff 0 Oct 28 13:18 file3
-rw-r--r-- 1 carl staff 0 Oct 28 13:18 file4
-rw-r--r-- 1 carl staff 0 Oct 28 13:18 file5
-rw-r--r-- 1 carl staff 0 Oct 28 13:18 file6
输出相同,只是去掉了前几行。
答案2
来自手册页:
如果 N(字节数或行数)的第一个字符是“+”,则从每个文件开头的第 N 项开始打印,否则,打印文件中的最后 N 项。N 可能有一个乘数后缀:b 512、k 1024、m 1024*1024。
答案3
回答:
首先,ls -s 生成 3 行,在第一行添加管道线,然后在单独的行上打印每个文件名。它是如何做到的?这毫无意义。
答案是,该ls
命令查看其标准输出并检查它是否连接到 tty。如果是,则它会格式化以进行显示。如果不是(例如,输出是文件或管道),则它会每行打印一个条目。
- 选项“
-C
”强制多列输出(就像进入终端一样)。 - 选项“
-1
”强制单列输出(就像进入管道一样)。