我知道我可以用 替换子字符串sed
并将命令评估与 集成$(...)
。但是如果我想根据要替换的字符串计算替换值怎么办?
例子
我有一个来自 stat 的格式化字符串:
❯ stat --format '%A size %s, birth %.10w mod %.10y' Ambient/The\ XX\ -\ Intro.mp3
-rw-r--r-- size 5126226B, birth 2021-12-05 mod 2021-11-15
现在我想让尺寸变得人类可读。我当然可以使用 stat 或中间变量的另一个调用:
❯ stat --format '%A size |, birth %.10w mod %.10y' Ambient/The\ XX\ -\ Intro.mp3 | sed "s/|/$(stat --format "%s" Ambient/The\ XX\ -\ Intro.mp3 | numfmt --to=iec)/"
-rw-r--r-- size 4,9M, birth 2021-12-05 mod 2021-11-15
本质
有没有办法在管道内处理此处理,也许通过awk
或使用cut
并将它们合并在一起?
答案1
如果您避免在大小后面插入B
(stat
在 Ubuntu 上不会自动插入此字符,所以我不确定它来自哪里) 和逗号,您可以通过管道传输stat
to的输出numfmt
并让它转换其输入中的第三个字段:
$ stat --format '%A size %s birth %.10w mod %.10y' box.ova
-rw------- size 17098132480 birth - mod 2021-12-06
$ stat --format '%A size %s birth %.10w mod %.10y' box.ova | numfmt --to=si --field=3
-rw------- size 18G birth - mod 2021-12-06
使用以下命令挤压多个连续空格tr
:
$ stat --format '%A size %s birth %.10w mod %.10y' box.ova | numfmt --to=si --field=3 | tr -s ' '
-rw------- size 18G birth - mod 2021-12-06