上一章:

Shell编程(二)_做测试的喵酱的博客-CSDN博客

一、ps命令

指令: ps
作用: 主要是查看服务器的进程信息
选项含义:
-e:等价于 ‘-A’ ,表示列出全部的进程
-f:显示全部的列(显示全字段)

二、 grep (文本过滤)

grep主要用于过滤。对文本按行来过滤。如果某一行包含要搜索的关键字,则会把这一整行输出出来。

2.1 grep基础使用方法

查看grep 帮助文档 grep --help

[root@ecs-39233 chenshuai]# grep --help
Usage: grep [OPTION]... PATTERN [FILE]...
Search for PATTERN in each FILE or standard input.
PATTERN is, by default, a basic regular expression (BRE).
Example: grep -i 'hello world' menu.h main.c

grep应用的两种形式

形式一:对一个文件/多个文件,进行搜索。

grep [OPTION]... PATTERN [FILE1,FILE2 ... ]

[OPTION] 可选项,可填写以下内容

PATTERN 关键字,被搜索的关键字。从文件FILE1 FILE2 搜索包含关键字 PATTERN 的行。

形式二:执行命令时,在命令结果中搜索数据

some command | grep [option] pattern

[OPTION] 可选项,可填写以下内容

PATTERN 关键字,被搜索的关键字。可以有没有引号,可以单引号,可以双引号。

如果没有引号,PATTERN 关键字中不能有空格。

单引号,PATTERN 关键字中的变量不能解析,搜索的什么就是什么

双引号,可以解析PATTERN 关键字中的变量。

将一个命令(command)的输出,通过管道符|传给后面的grep命令。

在第一个命令的输出结果中,搜索关键字pattern

选项 作用
-i 忽略大小写
-c 只输出匹配行的数量
-n 显示行号
-r 递归搜索
-E 支持拓展正则表达式
-W 匹配整个单词
-I 只列出匹配的文件名
-F 不支持正则,按字符串字面意思进行匹配

例子1

搜索在当前Linux系统中(/etc/passwd),是否存在某一个用户。

是否存在root用户

grep root /etc/passwd
[root@ecs-39233 ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@ecs-39233 ~]# 

是否存在miao用户

[root@ecs-39233 ~]# grep miao /etc/passwd
[root@ecs-39233 ~]# 

例子2 

查看当前系统,java进程信息

ps -ef |grep java

查看tomcat进程信息

ps -ef |grep tomcat

例子3  忽略大小写 -i

忽略大小写 -i

grep 默认不忽略大小写。 grep -i 忽略大小写。

不忽略大小写

[root@ecs-39233 ~]# echo "Hello world" |grep hello
[root@ecs-39233 ~]# 

忽略大小写

[root@ecs-39233 ~]# echo "Hello world" |grep -i hello
Hello world

例子3  统计总数量 -c

统计总数量 -c

查看Linux用户文件。/etc/passwd

[root@ecs-39233 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

这种nologin结尾的用户,是没有登录权限的用户。

统计一下 /etc/passwd 中,有多少个用户没有登录权限。-c

[root@ecs-39233 ~]# grep -c "/sbin/nologin" /etc/passwd
16

例子4 搜索多个文件

1、搜索多个文件

在 test_while.sh test_read_n.sh 这两个文件中,搜索"/bin/bash" 字符串

[root@ecs-39233 ~]# grep "/bin/bash" test_while.sh test_read_n.sh
test_while.sh:#!/bin/bash
test_read_n.sh:#!/bin/bash

2、对目录进行过滤 -r

我想在/chenshuai 目下,对所有的文件进行搜索。搜索"/bin/bash" 字符串

grep -r "/bin/bash" /chenshuai
[root@ecs-39233 chenshuai]# grep -r "/bin/bash" /chenshuai
/chenshuai/study_shell.sh:#!/bin/bash
/chenshuai/until.sh:#!/bin/bash
/chenshuai/miao_test.sh:#!/bin/bash

3、过滤时,只打印文件名称。不打印命中的字符串 -l

grep -rl "/bin/bash" /chenshuai
/chenshuai/study_shell.sh
/chenshuai/until.sh
/chenshuai/miao_test.sh

例子5 过滤目标行的前后数据

显示目标行的后几行数据 -A

显示目标行的前几行数据-B

显示目标行的前后各几行数据 -C

查看grep 帮助文档

grep --help

查看grep帮助文档,中的-A 用法。("\-A" 转义)

grep --help | grep "\-A"
[root@ecs-39233 ~]# grep --help | grep "\-A"-A, --after-context=NUM   print NUM lines of trailing context

显示目标行的后几行数据(-A ,after)

查看-A 这一行,及后3行数据。

grep --help | grep -A3 "\-A"

查看- B这一行,及前4行的数据。

显示目标行的前后各几行数据 -C

查看目前行的前后各2行数据

grep --help|grep -C2 "\-C"

2.2 grep + 正则

2.2.1 基础正则

^ 以x开头$ 以x结尾.*[][^]

在文件中搜索,以"r"开头的字符串

grep '^r' /etc/passwd

2.2.2 扩展正则 grep -E 或者 egrep

扩展正则:(常用)

 {}()|+?

在 文件中,匹配手机号

grep -E '^1[3456789]\d{9}$' /etc/xxx.log
egrep '^1[3456789]\d{9}$' /etc/xxx.log

2.2.3  过滤多个关键字

我想在文件中,搜索 文件中,包含-E -A -B 多个关键字的数据(这几个关键字是或的关系)

注意:

过滤多个关键字,需要使用正则中的管道符 | 表示或的关系

正则中的管道符| ,属于扩展正则,需要使用grep -E 或者egrep

-E 需要转移 \-E

grep --help | egrep '\-E|\-A\-B'
grep --help | grep -E '\-E|\-A|\-B'

2.3 grep 编写Shell 脚本

实现功能:

shell脚本,实现查看cpu 核数。

Linux知识小拓展:

使用top命令,查看linux信息。然后按1,顶部就会显示所有的cpu使用信息。

查看cpu的配置信息,

cat /proc/cpuinfo

里面,每一个核都有一个model name,所以统计cpu核数量,可以通过统计model name 文本数量实现。

grep -c "model name" /proc/cpuinfo

三、 sed (对文件进行增删改查处理)

sed全名叫stream editor,流编辑器。用无交互式的方式来编辑文本。

sed 编辑器没有破坏性,它不会修改文件,除非使用 shell 重定向来保存输出结果。默认情况下,所有的输出行都被打印到屏幕上。

 sed 工作过程 :
sed 编辑器逐行处理文件(或输入),并将输出结果发送到屏幕。sed 的命令就是在 vi和 ed/ex 编辑器中见到的那些。sed 把当前正在处理的行保存在一个临时缓存区中,这个缓存区称为模式空间或临时缓冲。sed 处理完模式空间中的行后(即在该行上执行 sed 命令后),就把改行发送到屏幕上(除非之前有命令删除这一行或取消打印操作)。sed 每处理完输入文件的最后一行后,sed 便结束运行。sed 把每一行都存在临时缓存区中,对这个副本进行编辑,所以不会修改或破坏源文件。

作用:

sed流编辑器,对文件进行增删改查的处理。

我们日常对文件进行处理,使用vim命令。但是在shell脚本中,不能使用vim处理文本,vim是一个交互式的命令,我们可以使用sed命令。

处理文本方式:

按照行来处理文本,与grep相似。

两种形式:

方式一:对文件进行处理

sed [option] "pattern command" file

[option] 可选的扩展项目,如-n -f -r等

pattern 要搜索的关键词。pattern 为空的话,默认是对每一行进行处理。

cmond 对命中的这一行数据,做何种处理。(处理命令)

file 文件路径

sed打印时,默认会把原数据打印出来。

方式二: 对命令的输出结果做处理

some command | sed [option] "pattern command"

将一个命令command的输出结果,传给sed处理。

sed 在这个结果中,寻找匹配行,然后对这一匹配行进行处理。

选项 作用
-n 只打印模式匹配的行
-f 加载存放动作的文件
-r 支持拓展正则
-i 支持修改文件

3.1 打印文件

sed 'p' /etc/passwd

没有搜索词,默认对每一行都处理。

'p' 打印命令,print简写 。

[root@ecs-39233 ~]# sed 'p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

发现,passwd文件中,每一行数据,都打印了两遍。因为sed打印了一遍原数据,还打印了一遍命中数据,所以打印了两遍。

-n 只打印模式匹配的行。(只打印1行)

sed -n 'p' /etc/passwd
[root@ecs-39233 ~]# sed -n 'p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

3.2 匹配词pattern 的四种类型

匹配模式 含义
3 只处理第3行
3,6 只处理第3行到第6行
/pattern1/ 只处理能匹配pattern1的行
/pattern1/,/pattern2/ 只处理匹配pattern1的行到pattern2的行

command命令 

命令 作用
查询 p 打印
新增 a add的缩写,在匹配行后新增

3.2.1 使用行号过滤,pattern 为行号

方式一:对文件进行操作

sed -n "第几行 操作命令" 文件路径

pattern 为具体的行号。

如,打印第3行内容

sed -n '3 p' /etc/passwd
[root@ecs-39233 ~]# sed -n '3 p' /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@ecs-39233 ~]# 

方式二 对一个命令的结果进行处理

cat /etc/passwd | sed -n '3 p'

对cat的运行结果,打印第3行的数据。

[root@ecs-39233 ~]# cat /etc/passwd | sed -n '3 p'
daemon:x:2:2:daemon:/sbin:/sbin/nologin

对连续的行进行处理 'x,y command'

如,打印第4行到第8行的数据

sed -n '4,8 p' /etc/passwd
[root@ecs-39233 ~]# sed -n '4,8 p' /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
[root@ecs-39233 ~]# 

3.2.2 使用正则过滤,pattern 为正则表达式

表达式:

sed -n '/正则表达式/ 操作命令' 文件路径 

举例,打印/etc/passwd 文件中,包含root的行

sed -n '/root/ p' /etc/passwd
[root@ecs-39233 ~]# sed -n '/root/ p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

对所有s开头的行,进行打印 /^s p/

sed -n '/^s/ p' /etc/passwd
[root@ecs-39233 ~]# sed -n '/^s/ p' /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

遇到/要使用转义

如,打印包含  /sbin/nologin 的行,其中/ 需要进行转义

sed -n -e '/\/sbin\/nologin/ p' /etc/passwd
[root@ecs-39233 ~]# sed -n -e '/\/sbin\/nologin/ p' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

 -r 支持拓展正则

sed 只默认只支持基本正则,拓展正则需要加-r

举例:

打印包含2个o的行,o{2}

sed -n -r '/o{2}/ p' /etc/passwd
[root@ecs-39233 ~]# sed -n -r '/o{2}/ p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin

多个正则的使用,实现过滤以x行到y行的数据。

注意,这里的多个正则,不是或的关系,而是 x行到y行 的意思。

举例,我要过滤,以adm开头的行,到以mail开头行的数据

sed -n '/^adm/,/^mail/ p' /etc/passwd
[root@ecs-39233 ~]# sed -n '/^adm/,/^mail/ p' /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

3.3 sed 修改文本

3.3.1 在目标行后写入内容 a (假修改,修改的内存)

模版:

sed  '/正则表达式/ a 新增内容' 文件路径 

a,append 追加

修改文本,只在当前输出的屏幕生效。 查看文本内容,实际并未做修改。

提前准备一个文件(如滕王阁序.txt)

vim 滕王阁序.txt
豫章故郡,洪都新府。星分翼轸,地接衡庐。襟三江而带五湖,控蛮荆而引瓯越。物华天宝,龙光射牛斗之墟;人杰地灵,徐孺下陈蕃之榻。雄州雾列,俊采星驰。台隍枕夷夏之交,宾主尽东南之美。都督阎公之雅望,棨戟遥临;宇文新州之懿范,襜帷暂驻。十旬休假,胜友如云;千里逢迎,高朋满座。腾蛟起凤,孟学士之词宗;紫电青霜,王将军之武库。家君作宰,路出名区;童子何知,躬逢胜饯。时维九月,序属三秋。潦水尽而寒潭清,烟光凝而暮山紫。俨骖騑于上路,访风景于崇阿;临帝子之长洲,得天人之旧馆。层峦耸翠,上出重霄;飞阁流丹,下临无地。鹤汀凫渚,穷岛屿之萦回;桂殿兰宫,即冈峦之体势。披绣闼,俯雕甍,山原旷其盈视,川泽纡其骇瞩。闾阎扑地,钟鸣鼎食之家;舸舰弥津,青雀黄龙之舳。云销雨霁,彩彻区明。落霞与孤鹜齐飞,秋水共长天一色。渔舟唱晚,响穷彭蠡之滨;雁阵惊寒,声断衡阳之浦。遥襟甫畅,逸兴遄飞。爽籁发而清风生,纤歌凝而白云遏。睢园绿竹,气凌彭泽之樽;邺水朱华,光照临川之笔。四美具,二难并。穷睇眄于中天,极娱游于暇日。天高地迥,觉宇宙之无穷;兴尽悲来,识盈虚之有数。望长安于日下,目吴会于云间。地势极而南溟深,天柱高而北辰远。关山难越,谁悲失路之人?萍水相逢,尽是他乡之客。怀帝阍而不见,奉宣室以何年?

向文件内插入内容。

举例: 对包含 “时维九月” 这一行,后面进行追加一行内容。

sed '/时维九月/ a 作者:王勃' /chenshuai/滕王阁序.txt
[root@ecs-39233 chenshuai]# sed '/时维九月/ a 作者:王勃' /chenshuai/滕王阁序.txt
豫章故郡,洪都新府。星分翼轸,地接衡庐。襟三江而带五湖,控蛮荆而引瓯越。物华天宝,龙光射牛斗之墟;人杰地灵,徐孺下陈蕃之榻。雄州雾列,俊采星驰。台隍枕夷夏之交,宾主尽东南之美。都督阎公之雅望,棨戟遥临;宇文新州之懿范,襜帷暂驻。十旬休假,胜友如云;千里逢迎,高朋满座。腾蛟起凤,孟学士之词宗;紫电青霜,王将军之武库。家君作宰,路出名区;童子何知,躬逢胜饯。时维九月,序属三秋。潦水尽而寒潭清,烟光凝而暮山紫。俨骖騑于上路,访风景于崇阿;临帝子之长洲,得天人之旧馆。层峦耸翠,上出重霄;飞阁流丹,下临无地。鹤汀凫渚,穷岛屿之萦回;桂殿兰宫,即冈峦之体势。
作者:王勃

使用cat命令,查看文本内容,实际并未修改。

3.3.2 在目标行后,直接新增文本内容 -i a

模版:

sed  -i '/正则表达式/ a 新增内容' 文件路径 

a,append 追加

真正修改文件内容。

举例:

在"落霞与孤鹜齐飞" 这一行后,追加一行备注

sed -i '/落霞与孤鹜齐飞/ a 备注:xxx' /chenshuai/滕王阁序.txt

查看文本内容,cat
真正增加了备注。

3.3.3  范围操作

对 x行到 y行的数据,进行操作

sed '/正则1匹配行/,/正则2匹配行/ a 新增备注' 文件路径 

举例:

对 时维九月 这一行,到 披绣闼 这一行 所有的行每一行,后面都新增一条数据。

sed '/时维九月/,/披绣闼/ a 新增备注zzzzz' /chenshuai/滕王阁序.txt 

3.3.4  在目标行前面增加内容 i

对某一行前面增加内容

模版:

sed  '/正则表达式/ i 新增内容' 文件路径 

举例:

sed '3 i 在第3行前增加数据' /chenshuai/滕王阁序.txt

这里使用的不是正则,使用的是行号(第3行)

3.4 读取外部文件,作为内容,添加到目标文件

读取外部文件,作为内容,添加到目标文件。

四、 awk

Shell编程(三)grep sed awk文本处理三剑客相关推荐

  1. Shell ❀ 三剑客 - Grep + Sed + Awk

    文章目录 八.三剑客 - Grep + Sed + Awk 1.Grep - 过滤 1.1 常用grep参数 1.2 使用方法 2.Sed - 行匹配 2.1 执行原理 2.2 常见语法 2.3 使用 ...

  2. linux grep sed awk

    linux 文本编辑命令grep sed awk(转)     grep grep (global search regular expression(RE) and print out the li ...

  3. Shell编程四剑客之AWK(基础篇)

    Shell 编程四剑客之 AWK 概述 其语法参数格式为,AWK 常用参数.变量.函数详解如下: (1) AWK 基本语法参数详解: (2) AWK 内置变量详解: (3) AWK 内置函数详解: ( ...

  4. linux三剑客及正则表达(grep,sed,awk)

    首先我们现在知道Linux下一切皆文件,对Linux的操作就是对文件的处理,那么怎么能更好的处理文件呢?这就要用到我们上面的三剑客命令. 在说这三个命令前我们要插入一个小插曲就是"正则表达式 ...

  5. 三剑客grep sed awk

    三剑客 正则(RE)表达式 应用场景 规则 注意事项 正则符号 基础正则 扩展正则 正则实例 正则 VS 通配符 三剑客 grep sed sed核心应用 awk awk执行过程 内置变量 awk 正 ...

  6. 正则表达式与扩展正则表达式(grep, sed, awk)

    Linux中用来在文件中搜索字符串的命令,如grep, sed, awk等命令支持正则表达式与扩展正则表达式. 1. 基础正则表达式 符号 解释 示例 * 匹配0次或多次 b.*t . 匹配任意字符 ...

  7. Linux高级专题详解--shell编程大全(shell变量,if语句,case语句,for循环,while循环,函数调用,数组,正则表达式,shell脚本三剑客--grep,sed,awk家族)

    shell编程 初始shell 程序 语言 编程 ---------------------------------- 语言 自然语言:汉语.英语 计算机语言:c语言.c++.(java php py ...

  8. 【Linux】 字符串和文本处理工具 grep sed awk

    Linux字符串&文本处理工具 因为用linux的时候主要用到的还是字符交互界面,所以对字符串的处理变得十分重要.这篇介绍三个常用的字符串处理工具,包括grep,sed和awk ■ grep ...

  9. grep, sed, awk

    这几个工具是shell中非常好用的文本流处理工具,可以进行查找,编辑或者分析等工作,它们都支持正则表达式,也支持使用shell内置的变量 grep grep是一个字符串比较工具,用于从文件中提取满足条 ...

最新文章

  1. OFRecord 图片文件制数据集
  2. 2018-4-15摘录笔记,《网络表征学习前沿与实践》 崔鹏以及《网络表征学习中的基本问题初探》 王啸 崔鹏 朱文武
  3. php不重复随机加时间毫秒,PHP实现的毫秒定时器,同时解决进程不重复堆积
  4. RabbitMQ系列之【启动过程中遇到问题及解决方案】
  5. 虚拟桌面模拟查找点击自绘控件
  6. QT关于资源文件的添加使用
  7. C/S框架网介绍|.NET快速开发平台|Winform开发框架
  8. 开心哲理---您的妻子! --转by yp
  9. 我来重新学习js的面向对象(part 4)
  10. 南京oracle soa,Oracle SOA平台之甲骨文SOA套件概述
  11. EDA实验课课程笔记(二)——Vim编辑器
  12. Codeforces Round #575 (Div. 3) 题解
  13. CSS:修改输入框placeholder样式
  14. status函数python_python之路-函数
  15. uploadify ajax,Uploadify预防未来的Ajax请求
  16. 通俗地理解贝叶斯公式(定理)
  17. 笔记︱横截面回归模型中调节效应+中介效应(横截面回归模型两大方向)
  18. PostgreSQL 函数
  19. c语言pointer,C语言讲义——指针(pointer)
  20. “线上食堂”项目报告

热门文章

  1. 前端javaScript模板引擎之ArtTemplate
  2. 简明扼要说浏览器环境
  3. 第五章创业机会与创业风险
  4. win10如何显示html文件夹,Win10显示隐藏文件夹图标_Win10查看隐藏文件夹方法-192路由网...
  5. 【死磕 Spring】----- IOC 之 Factory 实例化 bean
  6. 自己做量化交易软件(12)通通量化AI框架的使用1-与通通AI对话聊天
  7. 管理and电子商务相关资源
  8. NC65单据节点开发
  9. 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,求该数
  10. 拒绝纷繁复杂 快速制表软件分享