Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 搜索匹配字符串的文本以打印行和匹配字符串_Regex_String_Awk_Sed_Grep - Fatal编程技术网

Regex 搜索匹配字符串的文本以打印行和匹配字符串

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搜索一个大文本以查找匹配的字符串。我的目标是打印匹配字符串、行号和匹配行。我还没有完成第一部分(即打印匹配字符串)

目前我有:

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