как объединить слова, разбитые по строкам с дефисом в текстовом файле - PullRequest
0 голосов
/ 23 февраля 2012

В текстах OCR часто есть слова, которые текут из одной строки в другую с дефисом в конце первой строки.(то есть: в это слово вставлено '- \ n').

Я хотел бы объединить все такие разделенные слова в текстовом файле (в среде Linux).

Я верю этомудолжно быть возможно с помощью sed или awk, но синтаксис для них - темная магия для меня!Я знал текстовый редактор в окнах, который выполнял поиск / замену регулярных выражений с помощью новых строк в поисковом выражении, но я не знаю об этом в Linux.

Ответы [ 4 ]

1 голос
/ 23 февраля 2012

Обязательно сделайте резервную копию ocr_file перед запуском, так как эта команда изменит содержимое ocr_file:

perl -i~ -e 'BEGIN{$/=undef} ($f=<>) =~ s#-\s*\n\s*(\S+)#$1\n#mg; print $f' ocr_file
1 голос
/ 23 февраля 2012

Эй, это мой первый ответный пост, здесь идет речь:

' - \ n ' Я подозреваю, что это символы перевода строки. Вы можете использовать sed, чтобы удалить их. В качестве теста вы можете попробовать следующее:

1) создать тестовый файл:

echo "привет, это тест - \ n"> testfile

2) проверьте, что файл содержит ожидаемое содержимое:

cat testfile

3) проверить команду sed, она отправляет отредактированный текстовый поток на стандартный вывод (т. Е. Окно активной консоли) без перезаписи:

sed 's / - \\ n // g' testfile

(вы должны просто увидеть «привет, это тестовый файл», напечатанный на консоли без « - \ n »)

Если я соберу команду:

a) Сначала у вас есть сама команда sed:

СЭД

б) Во-вторых, выражения и специфические элементы управления sed должны быть в кавычках:

sed 'sedcontrols + regex' (текст в кавычках - это не то, что вы на самом деле введете, мы заполним это по ходу дела)

в) Укажите файл, из которого вы читаете:

тестовый файл sed 'sedcontrols + regex'

d) Чтобы удалить строку, о которой идет речь, нужно сказать, чтобы sed заменял ненужные символы ничем (ноль, ноль), поэтому вы используете ' s ' для замены, косую черту, затем нежелательная строка (подробнее об этом через секунду), затем снова косая черта, затем ничего (чем она заменяется), затем косая черта и затем масштаб (как вы хотите применить редактирование к одному линия или более). В этом случае я выберу ' g ', который представляет глобальный, как во всем текстовом файле. Итак, теперь мы имеем:

sed 's / regex // g' testfile

e) Нам нужно добавить нежелательную строку, но это сбивает с толку, потому что, если в вашей строке есть косая черта, ее необходимо экранировать, используя обратную косую черту. Итак, нежелательная строка - \ n выглядит как - \\ n

Мы можем вывести отредактированный текстовый поток на стандартный вывод следующим образом:

sed 's / - \\ n // g' testfile

Чтобы сохранить результаты, ничего не перезаписывая (при условии, что testfile2 не существует), мы можем перенаправить вывод в файл:

sed 's / - \\ n // g' testfile> testfile2

1 голос
/ 23 февраля 2012
cat file | perl -p -e 's/-\n//'

Если в файле есть окончания строк в Windows, вам нужно поймать cr-lf примерно так:

cat file | perl -p -e 's/-\s\n//'
0 голосов
/ 26 марта 2017
sed -z 's/-\n//' file_with_hyphens
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...