$ df -P .
Filesystem 1024-blocks Used Available Capacity Mounted on
/dev/nvme0n1p5 440667528 368468280 49744876 89% /
我知道当前的目录磁盘信息是这样的。但我真的混淆了sed命令。
$ df -P . | sed -n '$s/[[:blank:]].*//p'
/dev/nvme0n1p5
像$s/[[:blank:]].*//p
一样,这个字符串的含义。
sed -n '$s/[[:blank:]].*//p'
-n
命令告诉sed除非使用p
命令指定,否则不要打印任何行。$
与输入的最后一行匹配。命令s/[[:blank:]].*//p
用空字符串替换空白字符和所有剩余字符。后面的/p
标志指示打印替换后的行。总之,sed命令只打印输入流最后一行的第一个字。
这可以更易读地写成:awk 'END{print $1}'
,但更可能的是命令的意图是awk 'NR>1{print $1}'
,这可以在sed
中使用sed -e 1d -e 's/[[:blank:]].*//'
来完成
这是一个有趣的小命令,下面是我的发现。
我非常依赖sed手册页,并在我的终端中运行您的sed
命令来分解sed
请求正在执行的操作。
让我们一块一块地来:
df -P .
以STDOUT格式显示可用磁盘空间量,df手册页资源,您表示已经理解了。
df -P . | sed
将把df
的输出通过管道传输到sed
命令,这里有一个资源,其中包含|
管道命令的更多示例。
df -P . | sed -n
-n
选项将在过滤周期结束时抑制打印模式空间,我发现gnu的解释帮助我更好地理解了这个选项:
当脚本结束时,除非使用-n选项,否则模式空间的内容将打印到输出流中,如果删除了换行符,则会添加回后面的换行符。
sed手册页的df -P . | sed -n '$s/regexp/replacement/'
:
s/regexp/replacement/
尝试将regexp与模式空间相匹配。如果成功,则替换与替换匹配的部分。
和
$
匹配最后一行。
例如,sed -n $s/regexp/replacement/
在普通英语中说";在输入的最后一行中,找到regexp
并将其替换为replacement
。
最后,[:blank:]
匹配空格和制表符,.*
将匹配任何字符,并且s/regexp/replacement/p
末尾的p
选项告诉sed
将匹配的行输出到终端。
把所有东西都放在一起:
df -P . | sed -n '$s/[[:blank:]].*//p'
- 将stdout格式的磁盘空间量管道传输到
sed
sed
将尝试匹配此表达式:管道输入的最后一行中的[[:blank:]].*
- 如果匹配,请将匹配的制表符或空格以及后面的所有字符都不替换为任何字符
- 打印出匹配行的剩余部分
这可能超出了您的预期,我希望它能为您提供一些选项,让您了解此命令到底发生了什么。