-1

У меня есть текстовый файл, похожий на пример, показанный ниже:

139
text string
text string
text string
text string
text string
text string

139
fdghdfkljsghaksjgh
fdkdsjahgks
fklsdjghlksdjh
jksdgh

139

text string
text string
text string
text string
text string
text string
text string
text string

139

dfhsdglka
dfhglasd3489 57
sdauufh348977
3o487562348ryoius
85734uyf

139

text string
text string
text string
text string
text string
text string
text string

139

lksfh;klhdg;
dhfglsdhfg
jhdfgljasdhgf
dhfgkladhfg
hdgfla
fgjlad

139

text string
text string
text string
text string
text string
text string
text string
text string

139

dfhsdglka
dfhglasd3489 57
sdauufh348977
3o487562348ryoius
85734uyf

139

text string
text string
text string
text string
text string
text string
text string

139

lksfh;klhdg;
dhfglsdhfg
jhdfgljasdhgf
dhfgkladhfg
hdgfla
fgjlad

Я хочу извлечь весь текст между 139 который показывает блок текста "текстовая строка" и скопировать его в другой файл, игнорируя при этом случайные символы (не копировать). Также я не хочу, чтобы 139 отображался в новом файле. Упомянутая выше "текстовая строка" обозначает блок текста, содержащий несколько абзацев.

1 ответ1

0

Однострочник, использующий несколько perls и aspell (для идентификации случайных строк):

perl -0777 -ne 'while(m/(?<=139)(.*(\n)*)*(?=139)/g){print "$&\n";}' /path/to/file | \
perl -0777 -pe 's/139\n//g' | \
while read line; \
do if [ "`echo $line | perl -0777 -pe 's/[^a-zA-Z\s]//g' | aspell clean`" \
!= "`echo $line | perl -0777 -pe 's/[^a-zA-Z\s]//g' | aspell list`" ]; \
then echo $line; fi; done

Вот как это происходит:

  • Блоки между 139 извлечены (это оставляет последний блок снаружи)
  • Строки 139-х удалены
  • Строки передаются в цикл "while do done", в котором буквенные символы проверяются по словарю. Если строка содержит какие-либо слова в словаре, выводится вся строка. В противном случае он удаляется.

Примечание. Должен быть установлен правильный словарь Aspell.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .