11

So I have some output that has very long lines, and I want to have it formatted to lines no more than 80 columns wide, but I don't want to split words because they are in the column limit.

I tried

sed 's/.\{80\}/&\n/g' 

but has the problem of splitting words and making some lines begin with a space.

I managed to do it with Vim, setting textwidth to 80, going to the beginnig of the file and executing gqG to format the text. But ¡ would rather do it with sed, awk or something similar to include it in a script.

2
  • Why don't you use fmt?
    – Celada
    Jul 23, 2014 at 11:16
  • 4
    @Celada Because I didn't know of its existence :)
    – Msegade
    Jul 23, 2014 at 11:22

3 Answers 3

17

Use fold as follows:

fold -s -w80 file

This will only split at whitespace (-s), using a line width of 80 characters (-w80). So it does exactly the same as the fmt solutions, but it also allows to break at any character when omitting the -s option.

1
  • 2
    This is the best answer considering fmt merges separate lines by eating new lines.
    – user56041
    Jul 26, 2018 at 1:10
13

Use fmt instead:

fmt --width=80 file

From man fmt:

-w, --width=WIDTH
              maximum line width (default of 75 columns)
0
3

Below mentioned solution might help:

cat file_name.txt | fmt -w 80 > reduced_file_name.txt

fmt - simple optimal text formatter.

1

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .