GNU/Linux >> Belajar Linux >  >> Linux

Cara membuka teks 80 karakter

Jawabannya menggunakan fmt tampaknya untuk membungkus teks daripada membuka itu.

Secara umum, ini bisa menjadi masalah yang sulit. Misalnya, membedakan antara baris teks yang berdekatan yang sengaja diselesaikan lebih awal (misalnya poin-poin) dan baris teks yang mengalir bebas yang berdekatan dapat memerlukan beberapa konteks. Membedakan antara kata yang ditulis dengan tanda penghubung yang dipisahkan garis dan kata yang dipisahkan juga sulit.

Namun, bentuk umum untuk prosa adalah baris teks terbungkus yang berdekatan yang membentuk paragraf yang dipisahkan oleh satu baris baru kosong.

Ini dapat dibuka menggunakan yang berikut ini, agak terlibat, dengan satu liner:

sed -n '/.+/ H; /^$/ { x; s/\n/ /g; s/$/\n/ ; p}'

Atau Anda mungkin lebih suka skrip python kecil, terutama jika Anda akan menangani beberapa kasus khusus:

import sys
paragraph = []

for line in sys.stdin:
    line = line.strip()
    if line:
        paragraph.append(line)
    else:
        print ' '.join(paragraph).replace('  ', ' ')
        paragraph = []
if paragraph:
    print ' '.join(paragraph).replace(' ', ' ')

Jika Anda mendapati diri Anda menambahkan kapitalisasi khusus, maka Anda ingin menemukan asal teks yang dibungkus baris dan mendapatkannya dalam bentuk yang tidak dibungkus baris.


Kasus khusus, seperti yang dikatakan Att Righ…

Saya menemukan pertanyaan ini karena saya ingin "membuka" keluaran dari fortune program, yang menjengkelkan bahkan tidak standar - beberapa kue keberuntungan dibungkus dengan 78 karakter, yang lain dengan 77, 76, atau bahkan 75.
Skrip saya mencoba untuk menentukan apakah baris baru telah dimasukkan dengan sengaja atau karena batas panjang dengan menentukan apakah garis tersebut akan melanggar batas panjang jika tidak dipatahkan pada panjang yang tepat ini (yaitu jika terlalu panjang jika itu juga menyertakan kata pertama dari baris berikutnya). Sebagai efek samping yang bermanfaat, jika baris berikutnya dimulai dengan spasi putih, kata pertama (dipisahkan dengan spasi putih) adalah string kosong, sehingga paragraf yang terindentasi tidak pernah digabungkan ke baris di atasnya.

#!/usr/bin/python3

import sys
import fileinput

lines = list(fileinput.input())
lines = [l.strip('\r\n') for l in lines]

for i, l in enumerate(lines):
    # We need to account for 8-char-wide tabulators when calculating our line
    # length, but still want to print the original \t characters verbatim
    sanitized_line = l.replace('\t', ' '*8)

    # Is there a next line?
    if i+1 < len(lines):
        sanitized_next_line = lines[i+1].replace('\t', ' '*8)
    else:
        sanitized_next_line = ''

    next_line_first_word = sanitized_next_line.split(' ', 1)[0]

    if next_line_first_word != '':
        extended_line = sanitized_line + ' ' + next_line_first_word
    else:
        extended_line = sanitized_line

    if len(sanitized_line) <= 78 and len(extended_line) > 74:
        # This line was wrapped due to 78-char limit => unwrap it!
        sys.stdout.write(l + ' ')
    else:
        sys.stdout.write(l + '\n')

Linux
  1. Bagaimana Cara Membungkus Teks Pada Ukuran Kolom Tertentu?

  2. Bagaimana cara menambahkan teks ke file?

  3. Bagaimana cara mengubah HTML menjadi teks?

  1. Cara Menambahkan Teks ke Akhir File di Linux

  2. Cara menginstal Vim (vi) di Windows 10

  3. Bagaimana Menemukan Tanda Kurung yang Tak Tertandingi Dalam File Teks?

  1. Cara menyalin dan menempel di Putty

  2. Bagaimana cara menyalurkan panggilan subproses ke file teks?

  3. Cara menghapus \r karakter dengan sed