使用awk
,我需要在一个文件中找到一个匹配正则表达式模式的单词。
我只想打印与模式匹配的单词。
所以如果在排队的话,我有:
xxx yyy zzz
和模式:
/yyy/
我只想得到:
yyy
编辑:多亏了kurumi,我成功地写出了这样的东西:
awk '{
for(i=1; i<=NF; i++) {
tmp=match($i, /[0-9]..?.?[^A-Za-z0-9]/)
if(tmp) {
print $i
}
}
}' $1
这就是我所需要的:)非常感谢!
发布于 2011-04-04 16:19:28
这是非常基本的
awk '/pattern/{ print $0 }' file
让awk
使用//
搜索pattern
,然后打印出该行,该行默认情况下称为一条记录,用$0表示。至少读一读documentation吧。
如果您只想打印出匹配的单词。
awk '{for(i=1;i<=NF;i++){ if($i=="yyy"){print $i} } }' file
发布于 2011-04-04 16:50:12
听起来你是想模仿GNU的grep -o
行为。如果你只想要每行的第一个匹配项,这样做是可行的:
awk 'match($0, /regex/) {
print substr($0, RSTART, RLENGTH)
}
' file
下面是一个使用GNU的awk
实现(gawk)的示例:
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
手册中阅读有关match
、substr
、RSTART
和RLENGTH
的信息。
在此之后,您可能希望扩展它以处理同一行上的多个匹配。
发布于 2015-06-04 18:43:30
gawk可以使用下面的操作获取每一行的匹配部分:
{ if (match($0,/your regexp/,m)) print m[0] }
匹配(字符串,正则表达式,数组)如果数组存在,则将其清除,然后将数组的第0个元素设置为正则表达式匹配的字符串的整个部分。如果regexp包含括号,则将array的整数索引元素设置为包含与相应的带括号的子表达式匹配的字符串部分。http://www.gnu.org/software/gawk/manual/gawk.html#String-Functions
https://stackoverflow.com/questions/5536018
复制相似问题