grep匹配的行和字符串位置

时间:2014-02-06 15:40:08

标签: regex bash awk grep

我需要找到一种方法将grep匹配的精确坐标从一个文件输出到另一个文件。所以说'patterns'包含要匹配的字符串模式列表。 “搜索”是一个基于行的文本(ascii)文件,其中包含要搜索的文本。

使用:

grep -onf patterns search

我得到了这一行匹配的行和模式,但没有得到模式匹配的行,这就是我需要的。它不仅限于使用grep,awk等也没关系!

你们可以帮忙吗?

提前致谢!

最佳,

菲尔

2 个答案:

答案 0 :(得分:3)

使用awk你可以这样做:

awk -v s="needle" 'i=index($0, s) {print NR, i}' file

这将打印搜索项目的行#和行位置。

<强>更新

while read -r line; do
    awk -v s="$line" 'i=index($0, s) {print s ":" NR "," i}' searches
done < patterns

OR pure awk based:

awk 'FNR==NR{a[$0];next} {for (i in a) {if (p=index($0, i)) print i ":" NR "," p} }' patterns searches

答案 1 :(得分:3)

未测试:

awk 'NR==FNR{strings[$0]; next} {for (string in strings) if ( (idx = index($0,string)) > 0 ) print string, FNR, idx }' file1 file2

由于你在grep中使用-f我假设它是你要匹配的字符串,而不是正则表达式。

上面只是从第一个文件的内容构建一个字符串数组,然后对于第二个文件的每一行,它查找每个字符串在该谎言上出现的位置的索引,如果存在则打印字符串,该行number和该字符串首次出现在该行的索引(起始位置)。