ls -l | grep -v '^d' | sort -g -r -k 5 | head -2
:我使用此命令写入文本文件。
我在网上研究了一下,我认为这些命令的意思是:
grep
:在字符串中搜索特定模式的搜索-v
:grep 的一个选项,告诉它查找并显示所有不匹配的行''
:不确定单引号的用途^d
:插入符号表示行的开头,是d
grep 正在搜索的模式。这在使用时有效ls -l
。sort
按数字方式对文本文件的内容进行排序-g
按数值比较不确定这到底是什么意思-r
反转比较结果。如果我知道比较的目的,这就更有意义了。-k 5
开始一个键POS1-不确定这意味着什么,这是否意味着我的文本文件第一行的第 5 个字符会发生某些事情?head -2
显示我的文本文件的前两行。
有人可以帮助澄清我不确定的部分吗?
答案1
您已经掌握了大部分技术细节,但我认为您缺少整个事情的语义。
单引号可以'^d'
防止运行该管道的任何 shell 将正则表达式(即'^d'
)中的字符视为“特殊”。例如,$
是表示“行尾”的正则表达式。 Shell 还用于$
将下一个标记标记为 shell 变量,其值将被插入到字符串中。是^
的古老同义词|
,将左侧的管道 stdout 插入右侧的 stdin。单引号不会^
被特殊对待。
语义是不传递任何ls -l
标记为目录的输出行。ls -l
将“d”作为与目录相关的任何行的第一个字符。
选项-g
使sort
命令在键字段中查找数字的表示形式,并根据数值而不是字符串进行排序。默认排序顺序是从最小到最大,因此该-r
选项会导致它从最大到最小排序。表示-k 5
使用字段 #5 作为关键字段。sort
默认情况下,使用空白字符(空格、制表符等)将一行文本划分为“字段”。在我的 Arch Linux 机器上,第 5 个空格分隔的字段ls -l
是文件的大小(以字节为单位)。
这里的语义是按大小(以字节为单位)对文件进行排序,最大的在前。
您按字节大小对文件(不是目录)进行排序,并将最大的两个文件的信息放入文本文件中。
从编辑角度来说,解析 ; 的输出通常被认为是不好的形式ls
。看为什么不应该解析 ls(1) 的输出。历史上,ls
不同的机器上有不同的格式,假设文件大小为字段 5 的脚本在另一台机器上会出现难以理解的问题。所以要小心。
答案2
单引号 '' 用于指示字符的开始和结束。
-g 标志按照一般数值进行排序比较。
-r 选项使输出从最高到最低排序,因为排序的默认输出是从最低到最高。
如果我们想对文本文件行中的列或单词位置进行排序,则使用 -k 选项。