利用正则分析Linux高危命令,Linux 命令总结(二)-正则与文件分析处理

一、正则表达式

grep:显示匹配行

-v:反显示

-e:使用扩展正则表达式 grep -E “ ” xxx.txt 用来省去 扩展需要输入的 \

匹配操作符

\ 转义字符

. 匹配任意单个字符

[1249a],[ ^ 12 ],[ a - k ] 字符序列单字符占位

^ 行首

$ 行尾

\ 单词首尾边界

| 连接操作符

(,) 选择操作符

\n 反向引用

重复操作符

?匹配0到1次。

*匹配0到多次。

+匹配1到多次。

{n} 匹配n次。

{n,} 匹配n到多次。

{n,m} 匹配n到m次。

与扩展正则表达式的区别:grep basic

?, \ +, \ {, \ |, \ (, and \ )

匹配任意字符

.*

示例

创建文件 grep.txt ,文件内容如下:

ooxx12121212ooxx ooxx 12121212 oox 12121212 1212 ooxx 1212 oo3xx oo4xx ooWxx oomxx $ooxx oo1234xx ooxyzxx

266e96271d38ec8a4d9b58cfae633fb1.png

示例2:

创建test文件,文件内容如下:

aaabbcaaa aa bbc aaa bb bbc bbb asgodssgoodsssagodssgood asgodssgoodsssagoodssgod sdlkjflskdjf3slkdjfdksl slkdjf2lskdjfkldsjl

接下来查看下列输出匹配各是什么结果:

cat test

grep "a" test

grep "a{3}" test

grep "

grep "" test

grep "b" test

grep "b{2,3}" test

grep "god" test

grep "godgood" test

grep "god*good" test

grep "god.*good" test

grep "god.* good.* god.*good" test

grep "god.*good+" test

grep " \ (god.*good \ )+" test

grep "\ (god\ ).* good.*\1" test

grep "\ (god \ ).* \ (good \ ).* \1.*\2" test 反向引用的例子

grep "\ (god \ ).* \ (good \ ).* \1.*\2" test

grep "\ (god\ ).* \ (good \ ).* \2.* \1" test

二、文本分析处理

cut:显示切割的行数据

-f:选择显示的列

-s:不显示没有分隔符的行

-d:自定义分隔符

示例:

21f77f6e67a1479c1b492b796fd6c661.png

sort:排序文件的行

-n:按数值排序

-r:倒序

-t:自定义分隔符

-k:选择排序列

-u:合并相同行

-f:忽略大小写

示例:

93e184b828808668c33b823f058f849a.png

wc:文本统计

03c9d4e0b4e8aa07d0f656f1116294a2.png

sed:行编辑器

说明sed的语法是:sed [options(参数)] 'Address(地址)Command(命令)' file(文件) ...

sed:行编辑器options

-n: 静默模式,不再默认显示模式空间中的内容

-i: 直接修改原文件

-e SCRIPT -e SCRIPT:可以同时执行多个脚本

-f /PATH/TO/SED_SCRIPT

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

sed:行编辑器Command

-d: 删除符合条件的行;

-p: 显示符合条件的行;

-a \string: 在指定的行后面追加新行,内容为string

\n:可以用于换行

-i \string: 在指定的行前面添加新行,内容为string

-r FILE: 将指定的文件的内容添加至符合条件的行处

-w FILE: 将地址指定的范围内的行另存至指定的文件中;

-s/pattern/string/修饰符: 查找并替换,默认只替换每行中第一次被模式匹配到的字符串

-g: 行内全局替换

-i: 忽略字符大小写

-s///: s###, s@@@

\ (\ ), \1, \2

sed:行编辑器Address

可以没有

给定范围 如 : 第几行 1,2,3

查找指定行 如:/str/

简单示例:

9e7333c4c9fc60b80516b49c03237ad8.png

df530db7c3ad8c110e4aa29e534def29.png

40dfd3e6d960ea5693f503fea452e86a.png

fe2b66d17772a687f78f2ef9eeba0cb0.png

实用示例:修改inittab文件:

e225d246e2b84c6d9b9dc2f108f167cc.png

我们通过sed 's/\(id:\)[0-6]\(:initdefault:\)/\15\2/ig' inittab将3设置为5,结果如下:

dd15a68e4387c6b66e38089a47bbf261.png

实用示例:修改ip:

sed "s/\(IPADDR=\(\<2[0-5][0-5]\|\<2[0-4][0-9]\|\<1\?[0-9][0-9]\?\.\)\{3\}\).*/\188/" ifcfg-eth0将IP地址末尾改为188

awk 文本分析工具(重要)

awk是一个强大的文本分析工具。

相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。

简单来说awk就是把文件逐行的读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk语法: awk -F '{pattern(模式匹配) + action(动作)}' {filenames(文件名称)}

支持自定义分隔符

支持正则表达式匹配

支持自定义变量,数组 a[1] 、 a[tom] == map(key) 这里的数组可以相当于map

支持内置变量

ARGC 命令行参数个数

ARGV 命令行参数排列

ENVIRON 支持队列中系统环境变量的使用

FILENAME awk浏览的文件名

FNR 浏览文件的记录数

FS 设置输入域分隔符,等价于命令行 -F选项

NF 浏览记录的域的个数

NR 已读的记录数

OFS 输出域分隔符

ORS 输出记录分隔符

RS 控制记录分隔符

支持函数

print、split、substr、sub、gsub

支持流程控制语句,类C语言

if、while、do/while、for、break、continue

示例,查找passwd文件:

57cd304708d4a5c1b76dcb284f24da6f.png

只是显示/etc/passwd的账户:CUT

awk -F':' '{print $1}' passwd

0517af4bcfaafad8d68b6f453416515a.png

只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在所有行开始前添加列名name,shell,在最后一行添加"blue,/bin/nosh"(cut,sed)

awk -F':' 'BEGIN{print "name,shell"} {print $1 "," $7} END{print "blue,/bin/nosh"}' passwd

4bcefe529ad47c84c16671a23079677c.png

搜索/etc/passwd有root关键字的所有行

awk '/root/ { print $0}' passwd

acfcb9b82642fcf8a8ad54f767cddf6b.png

统计/etc/passwd文件中,每行的行号(NR),每行的列数(NF),对应的完整行内容

ff18d4026c92a2df3de1379456169711.png

示例,统计报表:合计每人1月工资,0:manager,1:worker:

创建文件awk.txt

2de3e001d66dbb3d8176042c8217b89f.png

执行命令:awk '{split($3,date,"-");if(date[2]=="01"){name[$1]+=$5;if($2=="0"){role[$1]="M"}else{role[$1]="W"}}} END{for(i in name){print i "\t" name[i]"\t" role[i]}}' awk.txt

结果:

fd3f24afc550e41e4b2a00b4f78d5e57.png

也可以将命令写入文件,然后读取文件执行命令:

97ad06da15e63941fcc839cc28f23ec6.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值