Sample Header Ad - 728x90

Wrap text accounting for non-printing characters

9 votes
1 answer
518 views
This question asks about wrapping text at a certain column, and people suggest using fold or fmt but as far as I can see, these simply count characters and don't allow for non-printing characters. For example: fold -w 20 -s <<<seq 1 25 as one might expect, produces: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 but: fold -w 20 -s <<<^[32mseq 1 25^[[m (where ^[ is the escape character) intuitively ought to produce the same thing in green text, but instead produces: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 in green text. I can't see any switches that say to account for non-printing characters, and the [PS1 approach to flagging non-printing characters doesn't seem to work with fold or fmt. Is there something (ideally something standard) that can wrap text whilst accounting for non-printable characters? ---------- EDIT: The example above is really to simplify and demonstrate the problem but I may have over-simplified. To clarify my real-world example, I've got text where some words are in colour (using ANSI escape sequences) and I'd like that to wrap neatly. For example: Here is some example text that contains ^[[31mred^[[m and ^[[32mgreen^[[m words that I would like to wrap neatly. where ^[ is the escape character. If I wanted this to wrap to 20 columns, I would expect: Here is some example text that contains red and green words that I would like to wrap neatly. (with "red" and "green" in colour) but because of the ANSI escape codes, it wraps thus: Here is some example text that contains red and green words that I would like to wrap neatly.
Asked by IpsRich (817 rep)
Feb 14, 2018, 09:11 AM
Last activity: Feb 14, 2018, 10:40 AM