linux常用命令介绍 03 篇——常用的文本处理工具之grep和cut(以及部分正则使用)
- 1 常用命令01篇 和 02篇
- 1.1 Linux命令01篇——Linux解压缩文件常用命令
- 1.2 Linux命令02篇——linux日常常用命令介绍
- 2. 正则表达式
- 2.1 基本定义
- 2.2 正则中常用的元字符
- 3. grep 工具
- 3.1 grep 工具使用语法
- 3.2 grep工具使用例子
- 3.2.1 常用选项的使用例子(非正则)
- 3.2.2 grep中正则eg1——开头、结尾、空行 和 -v
- 3.2.3 grep中正则eg2——`*`和`.`和`.*`
- 3.2.4 grep中正则eg3——和`[]`相关的
- 4. cut 工具
- 4.1 cut 工具——语法
- 4.2 cut 工具——使用例子
- 5.
1 常用命令01篇 和 02篇
1.1 Linux命令01篇——Linux解压缩文件常用命令
- 解压缩文件常用命令——linux.
1.2 Linux命令02篇——linux日常常用命令介绍
- linux日常常用命令介绍——实用、简单明了不啰嗦.
2. 正则表达式
- 注意:不需要用正则的,可以直接看下面非正则的例子。
2.1 基本定义
- 元字符:
元字符就是那些在正则表达式中具有特殊意义的专用字符。
如:*
、?
、.
(点)等 - 前导字符:
前导字符就是位于元字符前面的字符。如:- 在
bind*
中,*
前面的字符d
就是前导字符 - 在
sprin.*
中,.
前面的字符n
就是前导字符
- 在
2.2 正则中常用的元字符
元字符 | 作用 | 示例 |
---|---|---|
^ | 以关键字开头 | grep '^www.' aa.txt |
$ | 以关键字结尾 | grep '0.0.1$' redis_test.conf |
^$ | 匹配空行 | ①grep '^$' aa.txt ② grep -n '^$' aa.txt |
* | 前导字符出现 0次 或 连续多次 | ①grep 'heo*' aa.txt ② grep '^hello*' aa.txt |
. | 匹配除了换行符以外的任意单个字符 (位置前后均可放) | ①grep 'hell.' aa.txt ② grep '.hell' aa.txt |
.* | 匹配关键字后面任意长度的任意字符 (位置前后均可放) | ①grep 'hell.*' aa.txt ② grep '.*hell' aa.txt ③ grep '.*hell$' aa.txt ④ grep '^hell.*' aa.txt |
[] | 匹配括号里任意单个字符或一组单个字符 | |
[^] | 匹配不包含括号里任一单个字符 或一组单个字符 | |
^[] ( []$ ) | 匹配以括号里任意单个字符 或一组单个字符开头(结尾) | ①grep ^[hel] aa.txt ② grep [hel]$ aa.txt |
^[^] ( [^]$ ) | 匹配不以括号里任意单个字符 或一组单个字符开头(结尾) |
3. grep 工具
3.1 grep 工具使用语法
- grep 是行过滤工具,用于根据关键字进行过滤。
- 语法:
grep [选项] ‘关键字’ 文件名
- 常见选项
-i :不区分大小写 -n :显示行号 -w :按完整单词搜索(单词有误,可能搜索不到) -o :只打印出匹配搜索的关键字 -c :统计匹配关键字出现的行的的次数(行的次数) -A :显示匹配行及后面多少行 -B :显示匹配行及前面多少行 -C :显示匹配行前后多少行 ^key :以关键字开头 key$ :以关键字结尾 -v :查找不包含指定内容的行,反向选择 ^$ :匹配空行 -e :使用正则匹配 -E :使用扩展正则匹配 -r :逐层遍历目录查找 -l :只列出匹配的文件名 -L :列出不匹配的文件名
3.2 grep工具使用例子
3.2.1 常用选项的使用例子(非正则)
- 直接搜索(redis_test.conf 文件中 搜索关键字 redis.io)
grep 'redis.io' redis_test.conf
- 不区分大小写搜索
-i
grep -i 'Redis.io' redis_test.conf
- 搜索并查出关键字所在的行号
grep -n 'redis.io' redis_test.conf grep -n -i 'Redis.io' redis_test.conf grep -ni 'Redis.io' redis_test.conf
- 按完整单词搜索(单词拼错可能搜索不出来),用
-w
grep -w 'binding' redis_test.conf
- 只打印出搜索的关键字,用
-o
grep -o ' maxmemory ' redis_test.conf grep -no ' maxmemory ' redis_test.conf
- 统计匹配关键字出现的行的的次数(注意是:行的次数)
grep -c 'maxmemory2' redis_test.conf
- 前后n行的内容也打印(-A 、-B、 -C)
- 后面 n 行用:
-A
grep -A 5 '192.168.1.100' redis_test.conf
- 前面 n 行用:
-B
grep -B 5 '192.168.1.100' redis_test.conf
- 前后各 n 行用:
-C
grep -C 2 '192.168.1.100' redis_test.conf
- 后面 n 行用:
- 关于 -v 的取反操作的例子,看下面的 《3.2.2.1 简单正则例子(开头、结尾、空行)》,放这里了
3.2.2 grep中正则eg1——开头、结尾、空行 和 -v
- 搜索以关键字开头的行
- 以关键字
^# bind
开头的:^key
grep '^# bind' redis_test.conf
- 以关键字
- 搜索以关键字结尾的行
- 以关键字
0.0.1
结尾的:key$
grep '0.0.1$' redis_test.conf
- 以关键字
- 关于
-v
(取反操作)- 搜索不含关键字key的行,比如,搜索不含
bind
的行grep -v 'bind' redis_test.conf
- 搜索不以key关键字开头的,比如 搜索不以
# bind
开头的:grep -v '^# bind' redis_test.conf
- 搜索不以key关键字结尾的,比如搜索不以
0.0.1
结尾的:grep -v '0.0.1$' redis_test.conf
- 搜索不含关键字key的行,比如,搜索不含
- 匹配空行,用
^$
grep '^$' aa.txt grep -n '^$' aa.txt grep -nv '^$' aa.txt
3.2.3 grep中正则eg2——*
和.
和.*
-
*
:前导字符出现 0次 或连续多次。- 什么意思呢?比如解释下面的搜索命令
对于第一个命令,它搜索的结果就是:搜索关键字grep 'heo*' aa.txt grep '^hello*' aa.txt
he
并且后面紧跟的前导字符o出现0次或连续多次,其实你可以理解为这个搜索等价于grep 'he' aa.txt
,就是直接搜索he,区别就是上面的搜索o会高亮。 - 演示示例如下,可对比看看
- 什么意思呢?比如解释下面的搜索命令
-
.
:匹配除了换行符以外的任意单个字符。
第一个命令是:好比,忘了一个单词,只记得前几个字母hell
,那就按这个方式去搜索,会把以关键字为hell
开头的匹配搜索出来。看下面的例子,一看秒懂:grep 'hell.' aa.txt grep '.ello' aa.txt
-
.*
:匹配关键字后面任意长度的任意字符。
看图,秒懂:grep 'hell.*' aa.txt grep '.*hell' aa.txt grep '.*hell$' aa.txt grep '^hell.*' aa.txt
3.2.4 grep中正则eg3——和[]
相关的
[]
:匹配括号里任意单个字符或一组单个字符grep [hel] aa.txt
[^]
:匹配不包含括号里任一单个字符或一组单个字符grep [^hel] aa.txt
^[]
或者[]$
:匹配以括号里任意单个字符或一组单个字符开头grep ^[hel] aa.txt grep [hel]$ aa.txt
^[^]
或者[^]$
:匹配不以括号里任意单个字符或一组单个字符开头
都一样,这两就不说了。
4. cut 工具
- cut工具是列截取工具,用于列的截取。
4.1 cut 工具——语法
- 语法:
cut 选项 文件名
- 常用选项:
-c :以字符为单位进行分割截取 -d :自定义分隔符,默认为制表符\t -f :与 -d 一起使用,指定截取哪个区域
4.2 cut 工具——使用例子
-c
:- 语法:
cut -c startCol,endCol http.txt # 截取startCol列 到 endCol列的字符 cut -c startCol- http.txt # 截取startCol开始的所有列
- 使用例子:
cut -c 1,2 http.txt cut -c 2,3 http.txt cut -c 2- http.txt | head -2
- 语法:
-d
与-f
:- 语法:
cut -d: -f1 http.txt # 以:号进行分割列,并截取分割后的第一段列 cut -d. -f1,3 http.txt # 以.号进行分割列,并截取分割后的第一至第三段列
- 使用例子
cut -d. -f1 http.txt cut -d. -f1,3 http.txt | head -2 cut -d: -f1 http.txt | head -2
- 语法: