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')