首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用awk打印匹配的regex模式?

如何使用awk打印匹配的regex模式?
EN

Stack Overflow用户
提问于 2011-04-04 16:13:54
回答 9查看 516.3K关注 0票数 130

使用awk,我需要在一个文件中找到一个匹配正则表达式模式的单词。

我只想打印与模式匹配的单词。

所以如果在排队的话,我有:

代码语言:javascript
复制
xxx yyy zzz

和模式:

代码语言:javascript
复制
/yyy/

我只想得到:

代码语言:javascript
复制
yyy

编辑:多亏了kurumi,我成功地写出了这样的东西:

代码语言:javascript
复制
awk '{
        for(i=1; i<=NF; i++) {
                tmp=match($i, /[0-9]..?.?[^A-Za-z0-9]/)
                if(tmp) {
                        print $i
                }
        }
}' $1

这就是我所需要的:)非常感谢!

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-04-04 16:19:28

这是非常基本的

代码语言:javascript
复制
awk '/pattern/{ print $0 }' file

awk使用//搜索pattern,然后打印出该行,该行默认情况下称为一条记录,用$0表示。至少读一读documentation吧。

如果您只想打印出匹配的单词。

代码语言:javascript
复制
awk '{for(i=1;i<=NF;i++){ if($i=="yyy"){print $i} } }' file
票数 168
EN

Stack Overflow用户

发布于 2011-04-04 16:50:12

听起来你是想模仿GNU的grep -o行为。如果你只想要每行的第一个匹配项,这样做是可行的:

代码语言:javascript
复制
awk 'match($0, /regex/) {
    print substr($0, RSTART, RLENGTH)
}
' file

下面是一个使用GNU的awk实现(gawk)的示例:

代码语言:javascript
复制
awk 'match($0, /a.t/) {
    print substr($0, RSTART, RLENGTH)
}
' /usr/share/dict/words | head
act
act
act
act
aft
ant
apt
art
art
art

awk手册中阅读有关matchsubstrRSTARTRLENGTH的信息。

在此之后,您可能希望扩展它以处理同一行上的多个匹配。

票数 141
EN

Stack Overflow用户

发布于 2015-06-04 18:43:30

gawk可以使用下面的操作获取每一行的匹配部分:

代码语言:javascript
复制
{ if (match($0,/your regexp/,m)) print m[0] }

匹配(字符串,正则表达式,数组)如果数组存在,则将其清除,然后将数组的第0个元素设置为正则表达式匹配的字符串的整个部分。如果regexp包含括号,则将array的整数索引元素设置为包含与相应的带括号的子表达式匹配的字符串部分。http://www.gnu.org/software/gawk/manual/gawk.html#String-Functions

票数 42
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5536018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档