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.

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”.


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.


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

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

5

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


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


1
Co dodaje twoja odpowiedź, że inni tego nie zrobili?
Sheljohn,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.