Bash - 使用正则表达式检索文件中的文本字符串

时间:2015-03-22 03:12:25

标签: regex string bash text grep

如果标题措辞不好,我很抱歉。这就是这个想法。让我们说我有很多文件,我希望找到所有出现的特定表达式,例如:

tag:"some text I wish to retrieve"

请注意,上面的整行会显示在文件中。我希望只复制“' tag'”之后的引号中的内容。

我无论如何都不是bash的专家,但我可以轻松地使用grep来检索包含正则表达式的整行。简单。但是,我只想要那条线的一部分。引号中的文字长度不一。最终,我希望将所有事件合并到一个文件中。

例如,我想要获取FILE 1和FILE 2并最终获得FILE 3:

文件1:

whatever:"text I don't want" 
something:"More text I don't want" tag:"some text I wish to retrieve"

文件2:

whatever:"don't want" tag:"more text I wish to retrieve" something:"nope"

文件3:

some text I wish to retrieve
more text I wish to retrieve

这可以用bash完成吗?我可以通过一些努力在C中完成它,但如果我不必,我就不愿意。

编辑:

" -o"用于仅显示与表达式匹配的行的部分。我不知道在手册页中我是如何错过的。

2 个答案:

答案 0 :(得分:0)

您可以使用grep执行此任务。

grep -hrPo 'tag:"\K[^"]*' * > result

答案 1 :(得分:0)

这是gnu awk(由于RS中有多个字符而导致的gnu)版本:

awk -v RS="tag:" -F\" '{$1=$1} FNR>1 {print $2}' FILE*
some text I wish to retrieve
more text I wish to retrieve

这适用于awk的所有版本:

awk -F\" '{for (i=1;i<=NF;i++) if ($i~" tag:") print $(i+1)}' FILE*
some text I wish to retrieve
more text I wish to retrieve