将输出格式化为特定的行长

Mse*_*ade 7 sed awk text-processing text

所以我有一些输出有很长的行,我想将它格式化为不超过 80 列宽的行,但我不想拆分单词,因为它们在列限制内。

我试过

sed 's/.\{80\}/&\n/g' 
Run Code Online (Sandbox Code Playgroud)

但是存在拆分单词并使某些行以空格开头的问题。

我设法用 Vim 做到了,设置textwidth为 80,转到文件的开头并执行gqG以格式化文本。但是¡宁愿去做sedawk或者类似的东西,包括它的脚本。

cuo*_*glm 11

使用fmt来代替:

fmt --width=80 file
Run Code Online (Sandbox Code Playgroud)

来自man fmt

-w, --width=WIDTH
              maximum line width (default of 75 columns)
Run Code Online (Sandbox Code Playgroud)


tan*_*ius 11

使用fold方法如下:

fold -s -w80 file
Run Code Online (Sandbox Code Playgroud)

这将仅在空格 ( -s)处拆分,使用 80 个字符 ( -w80)的行宽。所以它与fmt解决方案完全相同,但它也允许在省略选项时在任何字符处中断-s

  • 考虑到 `fmt` 通过吃新行来合并单独的行,这是最好的答案。 (2认同)