如何使用GREP,REGEX或PERL提取符合模式的字符串
这是我的第一篇文章,所以请承担与我。我有一个文件,看起来像这样:
<table name="content_analyzer" primary-key="id"> <type="global" /> </table> <table name="content_analyzer2" primary-key="id"> <type="global" /> </table> <table name="content_analyzer_items" primary-key="id"> <type="global" /> </table> 我需要提取“name =”之后的引号内的任何内容,即content_analyzer,content_analyzer2和content_analyzer_items。 我在Linux盒子上做这个,所以使用sed,perl,grep或bash的解决方案是好的。 谢谢! 解决方法
旧版本的答案:
我认为最简单的单行解决方案(没有编写完整的脚本)将是使用grep: grep -no 'name="[^"]*"' file.html 在这行: > n选项将打印与模式匹配的行。只是信息的原因,乍一看。删除如果你不想要它。 此外,如果您想要将结果保存到文件,您可以通过追加> results.txt: grep -o 'name="[^"]*"' file.html > results.txt 这里的一个大问题是grep不支持环视(至少我不这么认为)。因此,结果将是: name="content_analyzer" name="content_analyzer2" name="content_analyzer_items" 它需要一些清理。这很容易在你的文本编辑器中做一些find / replace …但这就是为什么它不是一个完整的解决方案。 我怎么会这样做 在Vim中:-) 第一步 :v/name=/d 第二步 :%s/^.*name="([^"]*)".*$/1 邦,甚至不必走出文本编辑器。 更新 正如丹尼斯·威廉姆森在评论中所说,grep确实有使用-P选项的环境,根据手册将模式解释为一个Perl正则表达式。太棒了! 所以这里是明确的一线解决方案: grep -Po 'name="K.*?(?=")' file.txt (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |