Linux常用命令grep-从文件或者管道中筛选匹配的行

grep命令

作用:从文本文件或管道数据流中筛选匹配的行及数据,配合正则表达式一起使用,功能更加强大。

格式:

grep [options] [pattern] [file]

1,匹配包含"linuxidc"的行

ghostwu@dev:~/linux/grep$ cat -n linuxidc.txt
  my name is linuxidc
  how are you
  fine think you
  My name is linuxidc
  what's your name?
  my name is linuxidc2
 
ghostwu@dev:~/linux/grep$ grep "linuxidc" ghostwu.txt
my name is linuxidc
my name is linuxidc2

2,-v: 不包含,相当于取反

linuxidc@dev:~/linux/grep$ grep -v "linuxidc" ghostwu.txt
how are you
fine think you
My name is linuxidc
what's your name?

linuxidc@dev:~/linux/grep$

3,-n 添加行号

linuxidc@dev:~/linux/grep$ grep -n "linuxidc" ghostwu.txt
1:my name is linuxidc
6:my name is linuxidc2
ghostwu@dev:~/linux/grep$ grep -vn "linuxidc" ghostwu.txt
2:how are you
3:fine think you
4:My name is linuxidc
5:what's your name?
7:

4,-E,使用扩展的egrep命令,模式中可以用正则表达式

linuxidc@dev:~/linux/grep$ cat linuxidc.txt
my name is linuxidc
how are you
fine think you
My name is linuxidc
what's your name?
my name is linuxidc2

ghostwu@dev:~/linux/grep$ grep -E "my|your" linuxidc.txt
my name is linuxidc
what's your name?
my name is linuxidc2
ghostwu@dev:~/linux/grep$ grep -Ev "my|your" linuxidc.txt
how are you
fine think you
My name is linuxidc

ghostwu@dev:~/linux/grep$ grep -En "my|your" linuxidc.txt
1:my name is linuxidc
5:what's your name?
6:my name is linuxidc2

5,-i选项,不区分大小写

linuxidc@dev:~/linux/grep$ grep "linuxidc" ghostwu.txt
my name is linuxidc
my name is linuxidc2
ghostwu@dev:~/linux/grep$ grep -i "linuxidc" ghostwu.txt
my name is linuxidc
My name is linuxidc
my name is linuxidc2

6,-c :统计匹配的行数,不是匹配字符串的次数

linuxidc@dev:~/linux/grep$ grep -c "linuxidc" ghostwu.txt
2
linuxidc@dev:~/linux/grep$ grep -ci "linuxidc" ghostwu.txt
3

linuxidc@dev:~/linux/grep$ grep -c "linuxidc" ghostwu.txt
2
linuxidc@dev:~/linux/grep$ grep "linuxidc" ghostwu.txt
my name is linuxidc, nice to meet you,linuxidc
my name is linuxidc2
ghostwu@dev:~/linux/grep$ cat -n linuxidc.txt
    1    my name is linuxidc, nice to meet you,linuxidc
    2    how are you
    3    fine think you
    4    My name is linuxidc
    5    what's your name?
    6    my name is linuxidc2
    7   

7,-o: 只输出匹配到的字符串

linuxidc@dev:~/linux/grep$ grep -o "linuxidc" ghostwu.txt
linuxidc
ghostwu
linuxidc@dev:~/linux/grep$ grep -oi "linuxidc" ghostwu.txt
linuxidc
Ghostwu
linuxidc

8,-w: 只匹配过滤的单词,类似于精确匹配

linuxidc@dev:~/linux/grep$ grep -w "linuxidc" ghostwu.txt
my name is linuxidc, nice to meet you,linuxidc
ghostwu@dev:~/linux/grep$ grep -wi "linuxidc" ghostwu.txt
my name is linuxidc, nice to meet you,linuxidc
My name is linuxidc
ghostwu@dev:~/linux/grep$ cat -n linuxidc.txt
    1    my name is linuxidc, nice to meet you,linuxidc
    2    how are you
    3    fine think you
    4    My name is linuxidc
    5    what's your name?
    6    my name is linuxidc2
    7   

9,常用的一招小技巧,去除文件的注释和空行,在运维中,可以用这条命令把配置文件的空行和注释去掉,然后用管道生成。这样配置文件比较容易查看和配置

linuxidc@dev:~/linux/grep$ grep -Ev "^$|#" linuxidc.php
<?php
    class Person {
        public $name = 'linuxidc';
        public $age = 20;
        public function showinfo(){
            echo $this->name . PHP_EOL;
            echo $this->age. PHP_EOL;
        }
    }
linuxidc@dev:~/linux/grep$ cat -n linuxidc.php
    1    <?php
    2   
    3        class Person {
    4   
    5            #人名
    6            public $name = 'linuxidc';
    7   
    8            #年龄
    9            public $age = 20;
    10   
    11            #显示信息 
    12            public function showinfo(){
    13                echo $this->name . PHP_EOL;
    14                echo $this->age. PHP_EOL;
    15            }
    16        }

相关推荐