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

List all occurences of a particular string or number in the file : UNIX

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

目前我正在使用:-

egrep -H 845 *  

你可以试试这个:

awk '/845/ {print FILENAME,FNR,[=10=]}' *

或者这样:

grep -rF '845' *

这不会让你只点击 phone 个号码,而是所有符合这个号码的号码。
你不知道这是一个数字的中间,开始还是结束。

仅列出比赛周围的数字,

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

如果您的 phone 号码可以包含空格和标点符号,可以将它们添加到 character classes;但要小心,不要让正则表达式一次性匹配两个相邻的 phone 数字。 (如果它们始终由不在字符 class 中的文本分隔,则没问题。)

(在这个特定的正则表达式中没有任何内容 -E,所以我没有使用 egrep。)

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

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

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

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

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