LINUX.ORG.RU

Не силен в регекспах


0

0

А как можно из очень длинного текста вытащить все фразы которые взяты в кавычки? Вот, например, кусочек текста:

I didn’t know whether to trust her. “I suppose it’s in all the papers.” I haven’t looked. “You might go to prison for years.” Be worth it. Be worth going for life, I said.

И как бы мне вытащить отсюда две фразы в кавычках и сбросить их в отдельный файл по фразе на строку? Возможно ли такое вообще или это слишком сложно?

anonymous

Re: Не силен в регекспах

sed 's/[^"]*\("[^"]*"\)[^"]*/\1\n/g'

sdio ★★★★★ ()

Re: Не силен в регекспах

8220 -- это открывающая, а 8221 -- закрывающая, что ли? Кошмар с этими амперсандами.

Если кавычки всегда в одной строке, то

egrep -o '"[^"]+"'

но одна лишняя кавычка "перевернет" всю строку.

lodin ★★★★ ()
Ответ на: Re: Не силен в регекспах от sdio

Re: Не силен в регекспах

кажется сработало, но некоторые фразы без кавычек все равно проскакивали :) впрочем я добавил:

|grep \"

и остались только нужные фразы :)) Спасибо большое!

Karmadon ()
Ответ на: Re: Не силен в регекспах от lodin

Re: Не силен в регекспах

о! а это работает еще лучше! кажется именно то что надо! ну естественно после того как я все открывающие и закрывающие кавычки заменил на простые " :) лишних кавычек кажется не наблюдается, впрочем если пару фраз исчезнет то это не сильно страшно :)

Всем еще раз большое спасибо за помощь, проблема решена!

Karmadon ()
Ответ на: Re: Не силен в регекспах от lodin

Re: Не силен в регекспах

> egrep -o
Надо же совсем из головы вылетело. 
Отмазка: -о GNUтое расширение

\n в sed_e тоже не стандартно.

Наверное вот так самое портабельное решение будет:
awk -F\" '{for(i=2;i<NF;i+=2) print $i}'

sdio ★★★★★ ()

Re: Не силен в регекспах

perl -ne '/"/ or $st && print && next; $st && s/^(.*?")// && print "$1\n"; $st=0; print "$1\n" while s/(".*?")//; /(".*)$/ && (print "$1\n") && ($st=1)'

на седе это наверняка делается быстрее, однако я не силен в седе ;) .

Перевожу на русский:

1) если нет кавычек и состояние 1, вывести всю строку и идти дальше. 2) если состояние 1, вывести до первой кавычки и поменять состояние на 0 3) вывести подстроки в авычках 4) если осталась кавычка, вывести после нее и перевести в состояние 1

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