解释 sed 命令: df -P .|sed -n '$s/[[:空白:]].*//p'


$    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'

  1. 将stdout格式的磁盘空间量管道传输到sed
  2. sed将尝试匹配此表达式:管道输入的最后一行中的[[:blank:]].*
  3. 如果匹配,请将匹配的制表符或空格以及后面的所有字符都不替换为任何字符
  4. 打印出匹配行的剩余部分

这可能超出了您的预期,我希望它能为您提供一些选项,让您了解此命令到底发生了什么。

相关内容

  • 没有找到相关文章

最新更新