搜索命令-grep命令、通配符、正则表达式

文章目录

      • 1、grep命令
      • 2、grep命令和find命令的区别
      • 3、通配符与正则表达式
        • 1. 通配符:
        • 2.正则表达式

点这里看find命令←

1、grep命令

grep 的作用是在文件中提取和匹配符合条件的字符串,找到包含“搜索内容”的字符串
格式:
grep [选项] “搜索内容” 文件名

选项 作用
-i 忽略大小写
-v 反向选择
-n 输出行号
-color=auto 搜索出来的字符串以颜色显示
[root@akun ~]# cat wsx 
my name is Xiaokun
my name is xiaokun
The author is very handsome
#写了个文件看下grep的功能
[root@akun ~]# grep "xiaokun" wsx 
my name is xiaokun
[root@akun ~]# grep -i "xiaokun" wsx 
my name is Xiaokun
my name is xiaokun
[root@akun ~]# grep -v "xiaokun" wsx
my name is Xiaokun
The author is very handsome
[root@akun ~]# grep -vi "xiaokun" wsx
The author is very handsome
[root@akun ~]# grep --color=auto -i "xiaokun" wsx
my name is Xiaokun
my name is xiaokun#这里是有颜色的,复制过来的,看下图吧。

--color选项

2、grep命令和find命令的区别

1、find命令用于在系统中搜索符合条件的文件名,如果需要模糊查询,则使用通配符进行匹配,搜索时文件名是完全匹配的(find命令可以通过-regex选项,把匹配规则转为正则表达式规则,但不建议这样。)
2、grep命令用于在文件中搜索符合条件的字符串,如果需要模糊查询,则使用正则表达是进行匹配。搜索时字符串是包含匹配
点这里看find命令←

3、通配符与正则表达式

1. 通配符:

用于匹配文件名,完全匹配

通配符 作用
匹配一个任意字符
* 匹配0个或多个任意字符,也就是可以匹配任意内容
[] 匹配括号中任意一个字符。例如:[abc]代表匹配a或b或c其中一个
[-] 匹配括号中的任意一个字符,-代表范围,如:[0-9]表示匹配一个数字
[^] 逻辑非,表示匹配一个不是括号内的字符,例如,[^0-9]代表匹配一个不是数字的字符

注:使用通配符要用“”双引号括起来
[A-Z]匹配任意大写字母,[A-Za-z]表示匹配所有字母

例:

[root@akun tmp]# ls
abbc  abc  adc
[root@akun tmp]# find . -name "ab*"
./abc
./abbc
[root@akun tmp]# find . -name "a?c"
./adc
./abc
[root@akun tmp]# find . -name "a[db]c"
./adc
./abc
[root@akun tmp]# find . -name "a[^b]c"
./adc

2.正则表达式

用于匹配字符串,文件内容,包含匹配

正则符 作用
? 匹配前一个字符重复0次或一次
* 匹配前一个字符重复0次,或多次
[] 匹配中括号中任意一个字符。如:[abc]代表匹配a或b或c其中一个
[-] 匹配括号中的任意一个字符,-代表范围,如:[0-9]表示匹配一个数字
[^] 逻辑非,表示匹配一个不是括号内的字符,例如,[^0-9]代表匹配一个不是数字的字符
^ 匹配首行,如“^a”表示以a为行首的内容
$ 匹配尾行

shell把正则表达式中的?作为“扩展正则”,使用?号时要使用 egrep (也就是grep -E)
‘egrep’即‘grep -E’。‘fgrep’即‘grep -F’。

看下grep的帮助:

[root@akun ~]# egrep --help
用法: egrep [选项]... PATTERN [FILE]...
在每个 FILE 或是标准输入中查找 PATTERN。
默认的 PATTERN 是一个基本正则表达式(缩写为 BRE)。
例如: egrep -i 'hello world' menu.h main.c

正则表达式选择与解释:
  -E, --extended-regexp     PATTERN 是一个可扩展的正则表达式(缩写为 ERE)

做个例子:

[root@akun ~]# cat wsx 
23my name is Xiaokun
my name is xiaokun123
The author is very handsome
abcddddd
nnabcd
[root@akun ~]# egrep "n?" wsx 
#?n重复0次或多次,其实也就是有没有n都行,所以筛选出来是全部内容。
23my name is Xiaokun
my name is xiaokun123
The author is very handsome
abcddddd
nnabcd
[root@akun ~]# egrep "nn?" wsx 
23my name is Xiaokun
my name is xiaokun123
The author is very handsome
nnabcd
[root@akun ~]# grep "dd*" wsx 
The author is very handsome
abcddddd
nnabcd
[root@akun ~]# grep "ddd*" wsx 
abcddddd
[root@akun ~]# grep ^[0-9] wsx 
23my name is Xiaokun
[root@akun ~]# grep [0-9]$ wsx 
my name is xiaokun123

点这里看find命令←

你可能感兴趣的:(linux,linux)