linux 文件 三剑客,Linux文本处理三剑客(grep,sed,awk)

grep文本过滤工具

grep (Global search REgular expression and Print out the line)

文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查,打印匹配到的行

模式:由正则表达式字符及文本字符所编写的过滤条件

grep [OPTIONS] PATTERN [FILE...]

grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

--color=auto  高亮显示

-i:忽略大小写

-o:只显示匹配到的行

-w:匹配整个单词(数字字母下划线算单词一部分)

-v:只显示不被模式匹配到的行

-n:显示行号

-c:统计匹配到的行数

-e:多个选项之间是逻辑或or关系

-q:静默模式,不显示任何信息

-A #:After,前#行

-B #:Before,后#行

-C #:Context,前后#行

-E:使用扩展正则表达式Egrep

-F:使用Fgrep

正则表达式REGEXP

由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配功能

分类:

基本正则表达式:BRE

扩展正则表达式:ERE

元字符分类  man 7 regex

字符匹配   次数匹配   位置锚定   分组

基本正则表达式元字符

字符匹配

.:匹配任意字符

.*:任意字符任意次

[  ]:匹配指定范围内的字符

[^]:匹配指定范围外的字符

[[:digit:]]:数字

[[:lower:]]:小写字母

[[:upper:]]:大写字母

[[:alpha:]]:字符

[[:alnum:]]:字符和数字

[[:space:]]:水平和垂直的空白字符

[[:blank:]]:水平空白字符

[[:punct:]]:标点符号

匹配次数

*:匹配其前面字符任意次,包括0次

贪婪模式:尽可能长的匹配

\+:匹配其前面字符至少1次

\?: 匹配其前面字符0或1次

\{m,n\}:匹配其前面字符至少m次至多n次

\{n\}:匹配其前面字符n次

\{n,\}:匹配其前面字符至少n次

\{,n\}:匹配其前面字符至多n次

位置锚定

^:行首锚定,用于模式最左侧

$:行尾锚定,用于模式最右侧

^PATTERN$  匹配整行

^$空行     ^[[:space:]]*$ 空白行

\

\>或\b:词尾锚定

\  匹配整个单词

分组

\(\)将一个或多个字符捆绑到一起,当作一个整体进行处理 \(liu\)\+

分组括号中模式匹配到的内容会被正则表达式引擎记录到内部变量中,这些变量的命名方式是\1,\2,\3...

\1表示从左侧起第一个左括号与之右括号之间模式所匹配到的字符

\(string1\+\(string2\)*\)

\1:string1\+\(string2\)*

\2:string2

后向引用:引用前面分组括号中模式所匹配到的字符,而非模式本身

或者:\|

a\|b  a或b   C\|cat  C或cat   \(C\|c\)at  Cat或cat

5175a90209fe0c16fd88fb36987e5cdf.png

a99510451d92cd29dfcf513969f30c62.png

egrep及扩展正则表达式

egrep [OPTIONS] PATTERN [FILE...]

扩展正则表达式元字符

字符匹配

.:任意单个字符

[  ]:指定范围内

[^]:指定范围外

次数匹配

*:匹配其前面字符任意次

+:至少1次

?:0或1次

{m}:匹配m次

{m,n}:至少m次,至多n次

位置锚定

^:行首

$:行尾

\

\>或\b:词尾

分组

( )   后向引用:\1,\2,\3,...

或者

a|b:a或b    c|Cat:c或Cat     (C|c)at:Cat或cat

grep正则表达式经典练习题

1、显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方法)

ab21125d4f1a1b2507522da7d308ea89.png

2、显示/etc/passwd文件中不以/bin/bash结尾的行

8e876311ea8147168f86cfd01197e403.png

3、显示用户rpc默认的shell程序

8bbba754f61cdcc76cb8040a357be596.png

4、找出/etc/passwd中的两位或三位数

4ecce79a7903ecd34f33bc780ad416ce.png

5、显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面有非空白字符的行

b74656df5499e614fe98959df5045507.png

6、找出“netstat -tan”命令结果中以LISTEN后跟任意多个空白字符结尾的行

da63d5568f6013fa2cc7295ff1581411.png

7、显示CentOS7上所有系统用户的用户名和UID

b1c017fb97579c2493f8635eb3e3d777.png

8、添加用户bash、testbash、basher、sh、nologin(其shell为/sbin/nologin),找出/etc/passwd用户名和shell同名的行

9、利用df和grep,取出磁盘各分区利用率,并从大到小排序

10、取出当前OS主版本号

sed Stream EDitor  行编辑器

工作机制:sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使用诸如“D”的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非使用重定向存储输出。

功能:实现便捷的查看及修改文件

语法:

sed [OPTION]... 'script' inputfile...

常用选项

-n:不输出模式空间内容到屏幕

-e:多点编辑

-f /path/to/script_file:从指定文件中读取编辑脚本

-r:支持使用扩展正则表达式

-i.bak:备份文件并原处编辑

script   '地址命令'

地址定界

(1)不给地址:对全文进行处理

(2)单地址:

#:指定的行,$:最后的行

/pattern/:被此处模式匹配到的行

(3)地址范围:

#,#

#,+#    10,+20 --> 10,30

/pat1/,/pat2/      #,/pat1/

(4)~:步进

1~2 奇数行

2~2 偶数行

编辑命令

d:删除模式空间匹配到的行

p:打印当前模式空间内容,追加到默认输出之后

a[\]text:在指定行后面追加文本

\n可追加多行

i[\]text:在行前面插入文本

c[\]text:替换为单行或多行文本

w /path/somefile:

r  /path/somefile:

=:显示模式匹配到的行号

!:模式匹配空间中匹配到的行取反

查找替换

s///,支持使用其它分隔符  如s@@@   s###等

替换标记:

g:行内全局替换

p:显示替换成功的行

w /path/to/somefile:将替换成功的行保存至文件

sed高级用法

*大写字母都是追加,小写字母都是覆盖

P:打印模式空间开端至\n内容,并追加至默认输出之前

h:把模式空间中的内容覆盖至保持空间中

H:把模式空间中的内容追加至保持空间中

g:保持空间覆盖至模式空间

G:保持空间追加至模式空间

x:模式空间中的内容与保持空间中的内容互换

n:读取匹配到的行的下一行覆盖至模式空间

N:读取匹配到的行的下一行追加至模式空间

d:删除模式空间中的行

D:删除模式空间多行中的首行

示例

我们以test.txt文件为例,test.txt为文本文件(seq 1 8 > test.txt)

sed -n 'n;p' test.txt        显示偶数行

60a863b187dcd6415d5cf132e17aefba.png

sed 'n;d' test.txt            显示奇数行

14ab318852acc5e182e81abb6661c4c2.png

显示最后一行

sed '$!N;$!d' test.txt

sed '$!d' test.txt

sed 'N;D' test.txt

1f13492c153e45d9486f994d6bb87de8.png

sed '1!G;h;$!d' test.txt       倒序显示

6f6d46d1abb5704df80f211e46802c54.png

每行下面插入空行

sed 'G' test.txt

0ea91c06d79684bba075fe510b3c3f37.png

sed '/^$/;G' test.txt

e7b60c3807572b1ff29b554df577364f.png

sed 'g' test.txt  显示空行

fb0401ba71ba08a41afa895441597189.png

sed '$!N;$!D'  显示倒数二行

48efd9eabfc994481aae5bfa93939d58.pngawk

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值