grep的输出类似"文件:ln#:matchedpattern:paragraph"可能?

时间:2014-12-13 15:19:02

标签: grep

我根据自己的喜好使用以下命令,但完美度更高; - )

grep -w -i -r -n -f all.txt . > output.txt  

./index.php:86:complete paragraph1
./index.php:89:complete paragraph2

有了这个:

grep -w -i -r -o -n -f all.txt . > output.txt   

我们得到:

./index.php:86:match1
./index.php:89:match2

是否也可以将其组合起来?像这样:

./index.php:86:match1:complete paragraph1
./index.php:89:match2:complete paragraph2

会很棒,甚至比段落的一部分更好,但我想用这么简单的工具要求多少一点; - )

谢谢!

1 个答案:

答案 0 :(得分:0)

grep没有这方面的便利,但很容易在一个简单的Awk脚本中重新实现有用的部分。

awk 'NR==FNR { p[++i] = tolower($0); next }
    { line = tolower($0); for (j=1; j<=i; ++j) if (match(line, p[j]))
        { printf "%s:%i:%s:%s\n", FILENAME, FNR, substr($0, RSTART, RLENGTH), $0;
          next } }' all.txt files...

NR==FNR条件匹配第一个输入文件。该文件中的每一行都转换为小写并读入数组p

第二个操作仅适用于第二个和后续文件。它遍历p中的项目并检查当前行是否匹配。如果是,则打印匹配消息,然后跳到下一个输入行。