lon*_*nix 4 bash text-formatting
我有一个回显文本段落的 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"
Run Code Online (Sandbox Code Playgroud)
将打印如下内容:
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
Run Code Online (Sandbox Code Playgroud)
但我想要的是这个:
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
Run Code Online (Sandbox Code Playgroud)
我宁愿避免手动对许多这样的段落进行换行。
我已经看到各种技术的使用sed
等等,但我只需要依赖 shell 内置函数(应该尽可能简单)。
更新
这样说吧 -man
页面(对于任何随机命令)如何很好地格式化所有这些段落?他们肯定不是手工断线的吗?而且我认为他们在记录基本命令时没有使用内置命令以外的任何东西?
somecommand | fold | awk '{ print "\t" $0 }'
Run Code Online (Sandbox Code Playgroud)
这将从somecommand
(例如echo
)获取输出,通过 发送它fold
,这会将其折叠为 80 个字符(用于fold -w N
折叠N
字符)。然后awk
脚本将打印由制表符缩进的每一行。
在 purebash
中进行折叠必然会导致更复杂的脚本。
怎么样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
Run Code Online (Sandbox Code Playgroud)
您可以添加一个可选项-w n
来将换行的长度更改为n