使用正则表达式

时间:2019-04-05 18:41:19

标签: regex linux bash

我有一个文本文件,其中包含试图从$$中提取的部分数据。我试图弄清楚应该在文件中找到这样的字符串的正则表达式是什么。

例如,文档具有以下数据。

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

对于上面的示例,输出应为。

  1. 我正在寻找一些Web开发人员
  2. 福克斯跳过白狗

3 个答案:

答案 0 :(得分:2)

您可以将此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 :(得分:1)

使用GNU grep:

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

使用-P使用Perl正则表达式,因此我们可以使用?修饰符使.*变得非贪婪。使用-o在单独的行上打印出每个匹配的子字符串。

答案 2 :(得分:-1)

如果您选择Perl,请尝试:

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

尽管我不确定,它允许感兴趣的字符串跨越行