Jak mogę zawinąć tekst o określonej wielkości kolumny?

141

Wiem, że mogę użyć czegoś takiego jak cat test.txt | pr -w 80zawijanie wierszy do szerokości 80 znaków, ale to stawia dużo miejsca na górze i na dole drukowanych linii i nie działa poprawnie w niektórych systemach

Jak najlepiej wymusić zawijanie pliku tekstowego z długimi liniami o określonej szerokości?

Punkty bonusowe, jeśli nie możesz rozdzielić słów.

cwd
źródło

Odpowiedzi:

176

Szukasz

fold -w 80 -s text.txt
  • -w określa szerokość tekstu, gdzie 80 jest standardem.
  • -s mówi o łamaniu spacji, a nie słowami.

Jest to standardowy sposób, ale istnieją inne systemy, które potrzebują „-c” zamiast „-w”.

Rainer Bendig
źródło
Działa również w systemie OS X, ale nazwa pliku musi znajdować się za argumentami. Dzięki!
rdrey
2
Na marginesie, aby ładnie sformatować wiadomości e-mail pod kątem odpowiedzi tekstowej, używam:fold -s -w 80 email.txt | sed 's/^.*$/> &/'
Marcello Romani
2
@MarcelloRomani, czy nie powinieneś użyć szerokości 78, ponieważ przygotowujesz dwie postacie?
niania
1
Hmm ... tak sądzę. Dziękujemy za zwrócenie uwagi :)
Marcello Romani
2
Pamiętaj, że foldłamie adresy URL, podczas gdy fmtnie.
Skippy le Grand Gourou
51

Oprócz tego foldspójrz na fmt. fmtpróbuje inteligentnie wybrać podział linii, aby tekst wyglądał dobrze. Nie łamie długich słów, raczej zawija tylko spacje. Łączy także sąsiednie linie, co jest dobre dla prozy, ale złe dla plików dziennika lub innego sformatowanego tekstu.

Jonathan
źródło
3
Szczególnie podoba mi się fmt -t w porównaniu do fold
lkraav 24.12.12
15

1) zapewniona stała szerokość linii z podziałem słów:

fold -w 80 <text.txt

2) zapewniona stała szerokość linii z nadzwyczajnym dzieleniem słów (słowo jest łamane tylko wtedy, gdy jest zbyt duże, aby zmieścić się w linii):

fold -sw 80 <text.txt

3) obiecująca stała szerokość linii bez podziału słowa (jeśli słowo jest zbyt duże, aby zmieściło się w linii, nadal pozostaje takie, jakie jest, więc w końcu niektóre linie mogą być większe niż potrzebujesz):

fmt -w 80 <text.txt
użytkownik2683246
źródło
Niedoceniana odpowiedź. Dostępne w większości systemów. Niezłe.
Merc
11

Innym (mniej znanym) narzędziem, które robi to, co chcesz, jest wrapz GNU Talkfilters :

wrap -w 80 < textfile

Również (poza tematem):

ale daje to dużo miejsca na górze i na dole drukowanych linii

dodaj -tpodczas wywoływania, praby pominąć nagłówki / przyczepy:

   -t, --omit-header
          omit page headers and trailers
don_crissti
źródło
5

Więcej opcji formatowania można znaleźć na stroniepar - http://www.nicemice.net/par/

sendmoreinfo
źródło
2
Obecnie strona internetowa jest wyłączona, istnieje Archiwum Internetowe i pamięć podręczna Google, ale wciąż pokazuje to, dlaczego ważne jest, aby publikować więcej niż tylko linki, mógłbyś przynajmniej opublikować przykłady z oficjalnej dokumentacji.
phk
-1
fold -w 100 -s text.txt

działało dla mnie, ponieważ muszę podzielić każdą linię do 100 znaków

Swathipriya Bandar
źródło
1
Co dodaje twoja odpowiedź, że inni tego nie zrobili?
Sheljohn,