我有一个 bash 脚本来回显文本段落。我希望它们缩进。
例子:
echo "Something"
echo -e "\tfoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo"
将打印类似这样的内容:
Something
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo
但我想要的是这个:
Something
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo
我更喜欢避免手动对许多这样的段落进行换行。
我已经看到了各种使用的技术sed
等等,但我只需要依赖 shell 内置函数(应该尽可能简单)。
更新
这么说吧——man
页面(对于任何随机命令)如何很好地格式化所有这些段落?他们肯定不是手工断线的吗?我认为他们在记录基本命令时除了内置命令之外没有使用任何其他东西?
答案1
somecommand | fold | awk '{ print "\t" $0 }'
somecommand
这将从(例如)获取输出echo
,将其发送到fold
,这会将其折叠为 80 个字符(用于fold -w N
折叠N
字符)。然后awk
脚本将打印由制表符缩进的每一行。
在 pure 中进行折叠bash
必然会导致脚本更加复杂。
答案2
怎么样fmt
(来自 GNU Coreutils)
{ echo "Something"
echo -e "\tfoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo"
} | fmt
Something
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo
您可以添加一个选项-w n
来将换行的长度更改为n