Найти строку, заключенную в специальные символы, используя регулярное выражение - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть текстовый файл, который содержит данные, из которых я пытаюсь извлечь часть данных, которая заключена в $$. Я пытаюсь выяснить, каким должно быть выражение регулярного выражения, чтобы найти такие строки в файле.

Например, документ содержит следующие данные.

This is the stackoverflow website. $$ I am looking for some web developers $$, $$ Fox jumps over the white dog $$. 

Для приведенного выше примера вывод должен быть.

  1. Я ищу некоторых веб-разработчиков
  2. Фокс перепрыгивает через белого пса

Ответы [ 3 ]

2 голосов
/ 05 апреля 2019

Вы можете использовать это gnu awk с пользовательскими RS:

awk -v RS=' *\\$\\$ *' '!(NR % 2)' <<< "$str"

I am looking for some web developers
Fox jumps over the white dog
  • RS=' *\\$\\$ *' разбивает входные данные на несколько записей с $$ и необязательными пробелами с обеих сторон в качестве разделителя записей
  • !(NR % 2) печатает четную запись, которая представляет собой текст, окруженный $$ с обеих сторон.

В качестве альтернативы это gnu grep также может работать:

grep -oP '(?<=\$\$ ).*?(?= \$\$)' <<< "$str"
1 голос
/ 05 апреля 2019

С GNU grep:

$ grep -Po '\$\$.*?\$\$' file.txt
$$ I am looking for some web developers $$
$$ Fox jumps over the white dog $$

Используйте -P для использования регулярных выражений Perl, чтобы мы могли использовать модификатор ?, чтобы сделать .* не жадным. Используйте -o, чтобы распечатать каждую соответствующую подстроку в отдельной строке.

0 голосов
/ 06 апреля 2019

Если Perl ваш выбор, пожалуйста, попробуйте:

perl -0777 -ne 'while (/\$\$(.+?)\$\$/sg) {print $1, "\n"}' file.txt

Это позволяет интересующим цепочкам перекрывать строки, хотя я не уверен если это требование или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...