Regex 搜索匹配字符串的文本以打印行和匹配字符串
我正在使用awk搜索一个大文本以查找匹配的字符串。我的目标是打印匹配字符串、行号和匹配行。我还没有完成第一部分(即打印匹配字符串) 目前我有:Regex 搜索匹配字符串的文本以打印行和匹配字符串,regex,string,awk,sed,grep,Regex,String,Awk,Sed,Grep,我正在使用awk搜索一个大文本以查找匹配的字符串。我的目标是打印匹配字符串、行号和匹配行。我还没有完成第一部分(即打印匹配字符串) 目前我有: awk '/string1/string2/string3/{ print NR, $0 }' file_to_search.txt 这将生成行号和匹配行,但不生成匹配字符串 非常感谢您的帮助。您的问题不清楚,但听起来可能正是您想要的: awk 'match($0,/regexp/){ print substr($0,RSTART,RLENGTH),
awk '/string1/string2/string3/{ print NR, $0 }' file_to_search.txt
这将生成行号和匹配行,但不生成匹配字符串
非常感谢您的帮助。您的问题不清楚,但听起来可能正是您想要的:
awk 'match($0,/regexp/){ print substr($0,RSTART,RLENGTH), NR, $0 }' file_to_search.txt
使用grep,您可以获得行号和匹配字符串或完整的行(如我所知) 有了awk,你可以得到你想要的
awk '
function findmatch(s, i) {
for (i=1;i<=NF;i++)
{if ($i == s)
{print "find string = "s,"on line number = "FNR,"Complete line = "$0}};
}
s1{findmatch(s1)}
s2{findmatch(s2)}
s3{findmatch(s3)}
' s1='string1' s2='string2' s3='string3' infile
awk'
函数findmatch(s,i){
对于(i=1;i/string1/string2/string3/
不是有效的正则表达式。您是否正在搜索测试string1
或string2
或string3
?您编写的grep
命令不会生成所需的输出,即匹配的字符串、行号和匹配的行,而只搜索行号和匹配的字符串,这是不匹配的即使是正确的顺序。你显然没有抓住要点,这就是为什么发布一个解决方案,但它无论如何都不能提供所需的输出!答案的grep
部分不应该在那里。此外,在我看来,你的awk
命令不必要地冗长,而且更复杂,因此需要得到明确的期望结果。另一个answer更简单,可以精确地生成所需的内容。尽管要匹配OP,它需要用作awk'match($0,/regexp | regexp | regexp/){print substr($0,RSTART,RLENGTH),NR,$0}'file_to_search.txt
,但它可以工作并生成所述的所需输出。是的,您适合grep。使用awk,在一行上尝试使用nostring11,在另一行上尝试使用string1和string2,然后返回。
awk '
function findmatch(s, i) {
for (i=1;i<=NF;i++)
{if ($i == s)
{print "find string = "s,"on line number = "FNR,"Complete line = "$0}};
}
s1{findmatch(s1)}
s2{findmatch(s2)}
s3{findmatch(s3)}
' s1='string1' s2='string2' s3='string3' infile