awk 和 sed 挑战:调整文本宽度

发布于 2024-09-26 22:39:48 字数 309 浏览 4 评论 0原文

那么让我们看看如何做到这一点:将文本宽度修剪到某个值(例如 10)内。 对于超过 10 行,将其分成多行。

例子: 一个文本文件:

<前><代码>01234567 01234567890123456789abcd 0123

应改为:

<前><代码>01234567 0123456789 0123456789 abcd 0123

那么我们如何使用 sed 或 awk 尽可能短地做到这一点呢?

So let's see how can we do this: trim the text width within a certain value, say, 10.
For lines longer than 10, break it into multiple lines.

Example:
A text file:

01234567
01234567890123456789abcd
0123

should be changed to:

01234567
0123456789
0123456789
abcd
0123

So how can we do it using sed or awk as short as possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

浪荡不羁 2024-10-03 22:39:48

使用适合工作的适当工具...

fold -w 10

Use the proper tool for the job...

fold -w 10
半山落雨半山空 2024-10-03 22:39:48

或者,稍微短一些(比 Jonathan Dursi 的答案):

sed -e 's/.\{10\}/&\
/g' text.file

sed -e 's/.\{10,10\}/&\
/g' text.file

在 MacOS X 10.6.4 上测试,不使用 GNU sed。

Or, marginally shorter (than Jonathan Dursi's answer):

sed -e 's/.\{10\}/&\
/g' text.file

sed -e 's/.\{10,10\}/&\
/g' text.file

Tested on MacOS X 10.6.4, which does not use GNU sed.

烟花肆意 2024-10-03 22:39:48
$ sed -e 's/\(..........\)/\1\\n/g' foo.txt

或者,如果这不起作用(例如,没有足够新的 gnu sed),只需插入换行符并确保它被引用:

$ sed -e 's/\(..........\)/\1\\
/g' foo.txt

您也可以将其音译为 awk:

$ awk '{ gsub(/........../, "&\n" ) ; print}' foo.txt
$ sed -e 's/\(..........\)/\1\\n/g' foo.txt

or, if that doesn't work (eg, don't have a sufficiently new gnu sed), just insert a newline and make sure it's quoted:

$ sed -e 's/\(..........\)/\1\\
/g' foo.txt

You can pretty much transliterate that into awk, too:

$ awk '{ gsub(/........../, "&\n" ) ; print}' foo.txt
可是我不能没有你 2024-10-03 22:39:48

在具有可变宽度的 awk 中:

awk -v WIDTH=5 '{ gsub(".{"WIDTH"}", "&\n"); printf $0 }; !/\n$/ { print "" }'

当行是最大行宽度的精确倍数时,最后的语句可防止打印额外的换行符。

In awk with a variable width:

awk -v WIDTH=5 '{ gsub(".{"WIDTH"}", "&\n"); printf $0 }; !/\n$/ { print "" }'

The final statement prevents the printing of extra newlines when the line is an exact multiple of the maximum line width.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文