『3-2』Linux之文本处理工具

『3-2』Linux之文本处理工具

一、grep [Globally search a Regular Expression and Print ]

grep
grep -E = egrep

grep 格式 grep 匹配条件 处理文件

grep root passwd 过滤root关键字

在这里插入图片描述

grep ^root passwd 以root开头

在这里插入图片描述

grep -E '^root' passwd -E 高级正则表达式

在这里插入图片描述

grep root$ passwd 以root结尾

在这里插入图片描述

grep -i root passwd 忽略大小写

在这里插入图片描述

grep root passwd -v 反选,选中不带root的

在这里插入图片描述
grep -E "\<root" passwd root字符之前不能有字符

在这里插入图片描述
grep -E "\<root\>" passwd root字符前后均不能有字符

grep -E "^root" passwd 以root开头

在这里插入图片描述

grep -E "root$" passwd 以root结尾

在这里插入图片描述

grep root passwd | grep -E "^root|root$" -v 显示过滤字符在中间

在这里插入图片描述

grep mail passwd

在这里插入图片描述

grep -5 mail passwd 显示过滤行以及上面几行和下面几行

在这里插入图片描述

grep -B5 mail passwd 显示过滤行及其上面几行

在这里插入图片描述

grep -A5 mail passwd 显示过滤行及其下面几行

在这里插入图片描述

grep -n mail passwd 显示匹配的行所在行号

在这里插入图片描述

grep 字符数量匹配规则
w....s w开头s结尾中间4个任意字符

在这里插入图片描述

.....s s结尾的前面

在这里插入图片描述

二、sed 命令格式:sed 参数 命令 处理对象

sed 参数 处理命令

p 显示(一般引号可加可不加,有;$时引号一定要加,单双均可但需配套)
sed -n 5p westos 显示第五行

在这里插入图片描述

sed -n 3,5p westos 显示3-5行

在这里插入图片描述

sed -ne '3p;5p' westos 显示3和5行

在这里插入图片描述

sed -ne 1,5p westos 1-5行

在这里插入图片描述

sed -ne '5,$p' westos 5到最后的行

在这里插入图片描述

sed -n '/^#/p' fstab 显示以#开头的行

在这里插入图片描述

在这里插入图片描述

d
sed 5d westos 删除第五行

在这里插入图片描述

sed '/^UUID/!d' fstab 除了UUID以外的行都删除

在这里插入图片描述

sed -e '5,$d' westos 从第五行删除到

在这里插入图片描述

a 添加
sed -e '1a hello world' fstab

在第一行后面(第二行)添加hello world

sed -e '2a hello world' fstab

在第二行后面(第三行)添加hello world

sed -e '$a hello world' fstab

在这里插入图片描述

sed -e '$a hello\nworld' fstab

在这里插入图片描述

sed -e '/^#/a hello world' fstab

在这里插入图片描述

原文件不变

在这里插入图片描述

c 替换

sed -e '/^#/c hello world' fstab

在这里插入图片描述

在这里插入图片描述

sed '5chello world' westos

在这里插入图片描述

w
把符合的行写到指定文件中
sed '/^UUID/w westosfile' westos 把westos中UUID开头的行写入westosfile中

在这里插入图片描述

i 插入
sed '5ihello westos' westos

在这里插入图片描述

r 整合文件
sed ‘5r haha’ westos
在这里插入图片描述

sed字符替换

sed 's/:/####/g' westos
sed 's/:/####/' westos
sed '1,5s/:/####/g' westos
sed '1s/:/####/g' westos
sed '1s/:/####/g;5s/:/####/g' westos
sed '/lp/,/halt/s/:/####/g' westos

sed 's/\//####/g' westos
sed 's@/@####@g' westos
sed 's@/@####@g' -i westos 把sed处理的内容保存到westos文件中

sed 高级正则

这里有一个简单的例子:


$ echo 'abcabcabc' | sed 's/\(ab\)c/\1/'
ababcabc
$ echo 'abcabcabc' | sed 's/\(ab\)c/\1/g'
ababab
$ echo 'abcabcabc' | sed 's/\(ab\)\(c\)/\1d\2/g'
abdcabdcabdc

在第一个命令中,只有第一个匹配受到影响。在第二个命令中,每个匹配都会受到影响。在这两种情况下,\1指的是由转义括号捕获的字符。

在第三个命令中,指定了两个捕获组。他们通过使用\1和引用\2。最多可以使用九个捕获组。

除了g(全局)运算符(或没有它,第一次匹配)之外,你可以指定特定的匹配项:

$ echo 'aaaaaa' | sed 's/a/A/4'
aaaAaa

三、awk

FILENAME 文件名称本身

awk -F : '{ print FILENAME }' 打印文件名,有多少行打印多少次

[root@node26 mnt]# awk -F : '{print FILENAME}' passwd 
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
passwd
[root@node26 mnt]# awk -F : '{print FILENAME}' passwd |wc -l
54
[root@node26 mnt]# cat passwd | wc -l
54
[root@node26 mnt]# 

awk -F : 'BEGIN {print "WESTOS"}'开始打印,后面可不接文件

root@node126 ~]# awk -F : 'BEGIN{print "WESTOS"}'
WESTOS
[root@node126 ~]# 

NR 行数

[root@node126 ~]# awk -F : '{print NR}' /mnt/passwd 
1
2
3
4
5
[root@node126 ~]# cat /mnt/passwd | wc -l
5
[root@node126 ~]# 

NF 列数

{print HELLO}

[root@node126 ~]# awk -F :  '{print HELLO}' /mnt/passwd 
						#这里的HELLO是变量,未指定,所以打印为空




[root@node126 ~]# 
[root@node126 ~]# HELLO=98  ##外部定义无效
[root@node126 ~]# awk -F :  '{print HELLO}' /mnt/passwd 





[root@node126 ~]# awk -F :  'HELLO=98{print HELLO}' /mnt/passwd 
							#awk内部定义变量才有效
98
98
98
98
98
[root@node126 ~]# 

-F 后面默认是空格,空格时可省略-F.

‘{print $0}’ 这里必须用单引,双引会报错

空格分隔时,以单个空格为分隔

[root@node126 logs]# cat test |awk "{print $0}"
0
0
[root@node126 logs]# cat test |awk "{print $1}"
      5 192.168.1.26
      3 172.25.254.26
[root@node126 logs]# cat test |awk '{print $1}'
#空格分隔时,`以单个空格为分隔`
5
3
[root@node126 logs]# cat test |awk '{print $2}'
192.168.1.26
172.25.254.26
[root@node126 logs]# 

westos westos变量值

“westos” westos字符串

[root@node126 ~]# awk -F :  'BEGIN{print HELLO}' /mnt/passwd 

[root@node126 ~]# awk -F :  'BEGIN{print "HELLO"}' /mnt/passwd 
HELLO
[root@node126 ~]# 

/bash$/ 条件
/^squid/条件

某东面试题
/etc/passwd文件使用awk匹配squid用户,并打印其用户ID,passwd文件格式如下∶
squid1:x:500:500:/home/squid1:/bin/bash
squid2:x:500:500:/home/squid2:/bin/bash
[root@node126 ~]# awk -F : '/^lp/{print $3}' /mnt/passwd 
4
[root@node126 ~]# awk -F : '/^root/{print $3}' /mnt/passwd 
0
[root@node126 ~]# awk -F : '/^root/{print $0}' /mnt/passwd 
root:x:0:0:root:/root:/bin/bash
[root@node126 ~]# 

/条件1|条件2/ 条件1或者条件2
/条件1/||/条件2/ 条件1或者条件2
/条件1/&&/条件2/ 条件1并且条件2
awk 'NR==2{print $0}' userlist NR==2时

$0 所有的列
$1 第一列
$2 第二列
$3 第三列

/etc/passwd文件的第六列没有home关键字并且以bash结尾的行
awk -F : ‘$6!~/home/&&/bash$/{print}’ /etc/passwd

练习:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值