如果标题措辞不好,我很抱歉。这就是这个想法。让我们说我有很多文件,我希望找到所有出现的特定表达式,例如:
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"用于仅显示与表达式匹配的行的部分。我不知道在手册页中我是如何错过的。
答案 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