列出文件中所有特定字符串或数字的出现位置:UNIX

时间:2015-02-11 06:39:52

标签: shell unix awk filter grep

我有多个文件包含格式为XXX XXX XXXX或+ XX XXXXXX XXXX或XXXXXXXXXX的电话号码。我可以列出包含特定号码的所有电话号码吗? '845'针对每个文件名。

目前我正在使用: -

egrep -H 845 *  

3 个答案:

答案 0 :(得分:0)

你可以试试这个:

awk '/845/ {print FILENAME,FNR,$0}' *

或者这个:

grep -rF '845' *

这不仅仅会在电话号码上打击,而是与此nubers一致 你不知道这是一个数字的中间,开始还是结束。

答案 1 :(得分:0)

列出比赛周围的周围数字,但没有别的,

grep -Ho '[0-9]*845[0-9]*' files

如果您的电话号码可以包含空格和标点符号,可以将其添加到character classes;但要小心,以免正则表达式匹配两个相邻的电话号码。 (如果它们总是由不在字符类中的文本分隔,那么你很好。)

(此特定正则表达式中没有-E,所以我没有使用egrep。)

答案 2 :(得分:0)

这可能会做你想要的(使用GNU作为单词分隔符):

$ cat file
now is the 123 845 1234 winter of +01 238456 5432
our 1845234567 discontent.

$ cat tst.awk         
{
    while ( match($0,/(\<(([0-9]{3} ){2}[0-9]{4}|[0-9]{10})|[+][0-9]{2} [0-9]{6} [0-9]{4})\>/) ) {
        tgt = substr($0,RSTART,RLENGTH)
        $0 = substr($0,RSTART+RLENGTH)
        if ( tgt ~ /845/ ) {
            print tgt
        }
    }
}

$ awk -f tst.awk file
123 845 1234
+01 238456 5432
1845234567

如果没有,请编辑您的问题以提供一些示例输入和预期输出。