1

我遵循了Casey 的 Conky Reference with Examples 中的示例。

我修改它有


[conky config section]
 -- Format the storage information the same way for every device. Parameters: [human name] [path]
template3 = "\\1 [${fs_size \\2} ${fs_type \\2}]${alignr}${fs_used \\2} used ${fs_bar 10,60 \\2}\n${alignr}${voffset -15}${fs_used_perc \\2}%\nMount=${color3}\\2$color",

[conky TEXT section]
${execpi 60 df -h -t ext4 -t vfat -t fuse.sshfs -t fuseblk -t hfsplus --output=source,target | grep  -ve "boot" -ve "nvme0"  -ve "sda"  | grep '^/dev/' | cut --characters=6- | sed 's/^/\$\{template3 /;s/$/\}/'}

这是工作。

我想将 USB 设备的名称分离出来并显示出来,而不是显示挂载点的整个路径。

所以,我尝试了以下几行:

[conky config section]
template3 = "\\1 [${fs_size \\2} ${fs_type \\2}]${alignr}${fs_used \\2} used ${fs_bar 10,60 \\2}\n${alignr}${voffset -15}${fs_used_perc \\2}%\nName=${color3}\\$color",

[conky TEXT section]
${execpi 60 df -h -t ext4 -t vfat -t fuse.sshfs -t fuseblk -t hfsplus --output=source,target | grep  -ve "boot" -ve "nvme0"  -ve "sda"  | grep '^/dev/' | awk -F/ '{printf "%s\t%s\n", $0, $NF}' | cut --characters=6- | sed 's/^/\$\$\{template3 /;s/$/$/\}/'}


我不知道如何让它发挥作用,也许是因为我不太擅长sed.

4

1 回答 1

1

您需要向模板添加第三个参数,并使用\\3. 因此,您将其更改为:

template3 = "...Name=${color3}\\3$color"

实际使用模板时,此第三个参数必须用空格分隔,而不是\t您在添加的awk. 您不需要更改 sed,它只是用${template3 ... }.

您可以更轻松地在 awk 中完成所有操作,而不是混合使用 grep、awk 和 sed。尝试:

${execpi 60 df -h -t ext4 -t vfat -t fuse.sshfs -t fuseblk \
  -t hfsplus --output=source,target |
 awk -F/ '/boot|nvme0|sda/{ next }
          $0 ~ "^/dev/" { printf "${template3 %s %s}\n",substr($0,6),$NF }'}

原来的grep -ve "boot"意思是匹配包含“boot”的行。awk 等效项是/boot/{ next },即:如果您在输入行中匹配正则表达式“boot”,则继续处理下一个输入行。正则表达式/boot|nvme0|sda/表示bootornvme0sda

原版grep '^/dev/'使用正则表达式,这意味着只匹配以 ( ^)开头的行/dev/。awk 等效项可以是/^\/dev\//{print},但由于正则表达式必须在其中,//这意味着您需要转义/and 可能比替代方案可读性差一点: $0 ~ "^/dev/" {....}$0整行在哪里,~表示匹配,您可以使用引号中的字符串作为一个正则表达式。

原来的cut ...意思是从第 6 个字符开始,而 awk 有一个函数substr(string, start, length)可以创建一个可以做到这一点的子字符串。如果没有给出长度,则返回整个字符串的其余部分。

您可以在${exec}表单中使用换行符,但您必须小心使用模板:使用技巧来确保${template3字符串中永远不会出现。在这里我使用了$\{.

于 2021-03-16T14:04:08.343 回答