gpt4 book ai didi

linux - 使用 printf 在 bash 中格式化多行命令输出

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:36:48 24 4
gpt4 key购买 nike

我的 Bash 脚本使用 printf 以下列方式打印应用了格式的其他一些命令的输出(注意两个前导空格):

printf "  %-16s %s\n" "foo:" "$(bar)"

有两个前导空格,因为文件中的第一行是注释,我喜欢保持对齐:

# foo
foo: bar
foo: bar
...

这对于具有单行输出的命令非常有效。但是,当输出为多行时,输出会丢失后续行的格式。

例如:

printf "  %-16s %s\n" "Contents:" "$(ls -a)"

结果是这样的:

  Contents:       .
..
foo
bar

相反,我想要实现的是多行输出,每行都格式化(如果您愿意,可以按列),它看起来像这样(注意后续行中缺少“标题”):

  Contents:       .
..
foo
bar

到目前为止,我的理解是带有两个参数(第一个是字符串,另一个是给定命令的结果)的 printf 将第二个参数视为单个字符串,这可以在其中包含换行符。因此,根据我要求 printf 执行的操作,输出的格式实际上是正确的,但这不是我想要的。

我知道一些与解析命令输出相关的缺陷,例如 ls,这耗尽了我目前解决这个问题的可能性。此外,printf 可能不是执行此操作的最佳工具。

如果无法解决此问题,我正在考虑将多行字符串替换为逗号分隔列表,但这是最后的手段。

实现我需要的格式的最佳方法是什么?

感谢您的帮助。

最佳答案

printf "  %-16s %s\n" "foo:" "$(bar | sed '2,$s/^/                   /g')"

关于linux - 使用 printf 在 bash 中格式化多行命令输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16583320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com