LINUX.ORG.RU

Выстраивание каждого предложения в одну строку.

 , , , ,


1

1

Добрый день! Пытаюсь переформатировать текст из субтитров.

Сначала из субтитров убрал строки начинающиеся на цифры:

cat 02-Dependencies.srt | grep -v "^[0-9]" > 02-Dependencies.txt

Получил вот что:

However, it must be compiled before asterisk in order for Asterisk to be able to use it.

The goal of this module is to describe 
the basic process

of installing and verifying dependencies
. In the next module entitled

"Installing Asterisk from source" we will show 
you how to actually install the

dependencies we've just described.

Далее форматирую текст так:

However, it must be compiled before asterisk in order for Asterisk to be able to use it.

The goal of this module is to describe the basic process of installing and verifying dependencies. 

In the next module entitled "Installing Asterisk from source" we will show you how to actually install the dependencies we've just described.

Есть ли скрипты, которые так могут переформатировать текст?

В итоге получился вот такой скрипт:

#!/bin/bash

for i in *.srt; do

cat "$i"| grep -v "^[0-9]" |  dos2unix | sed -e '/^$/d' | sed ':a;N;$!ba;s/\n/ /g' | tr -s [:blank:] ' ' | sed -e 's/\. /\.\n /g' | sed 's/^[ \t]*//' | sed G > "$i".txt;

done

Где

grep -v "^[0-9]" #убираем строки начинающиеся на цифры

dos2unix #убираем dos-кое окончание строк
sed -e '/^$/d' #удаляем пустые строки
sed ':a;N;$!ba;s/\n/ /g' #собираем все в одну строку
tr -s [:blank:] ' ' #Удаляем повторяющиеся пробельные символы
sed -e 's/\. /\.\n /g' #Заменяем точки на перевод строки с пробелами, чтобы каждое предложение было на отдельной строке
sed 's/^[ \t]*//' #Удаляем все пробелы и символы табуляции в начале каждой строки файла
sed 'G;G' #вставляем ДВЕ пустые строки после каждой строки

Удаляй \n если строка непустая - sed в помощь.

Или типа такого:

$ cat "$file" | while read str; do echo -n "$str"; [[ -z "$str" ]] && echo ; done

Kroz ★★★★★ ()
cat 02-Dependencies.txt | perl -ne 's/\n/ /; s/\.\s+?/\.\n\n/; s/^\s//; print'
Deleted ()

cat «$i»| grep -v «^[0-9]» | dos2unix | sed -e '/^$/d' | sed ':a;N;$!ba;s/\n/ /g' | tr -s [:blank:] ' ' | sed -e 's/\. /\.\n /g' | sed 's/^[ \t]*//' | sed G > «$i».txt;

упоролся? это всё можно одной командой sed сделать.

sed 'G;G' #вставляем ДВЕ пустые строки после каждой строки

команда G для другого нужна, проще сделать 's/.*/&\n\n/'

emulek ()
Ответ на: комментарий от beastie

он русский знает?

не знает.

$ fmt -w10 3
ла ла
ла ла
лала
ла ла
ла ла
лала

emulek ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.