一、grep
1、grep概述
文本过滤命令:grep是一种文本搜索工具,根据用户指定的“模式”对目标文本进行匹配检查,打印匹配到的行;
grep:由正则表达式或者字符及基本文本字符所编写的过滤条件;
2、grep匹配字符
-E 拓展正则表达式
grep root passwd 查找包含root的关键词
[[email protected] mnt]# cat 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
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
westos:x:0:0:root:/root:/bin/bash
test:x:0:0:root:/rootwestos:/root
test:x:0:0:root
redhat:x:0:0:westosroot
grep -E "\<root" passwd 模糊匹配以root开头的词
root:x:0:0:root:/root:/bin/bash
westos:x:0:0:root:/root:/bin/bash
test:x:0:0:root:/rootwestos:/root
test:x:0:0:root
[[email protected] mnt]# grep -E "root\>" passwd 模糊匹配以root字符结尾的关键词
root:x:0:0:root:/root:/bin/bash
westos:x:0:0:root:/root:/bin/bash
test:x:0:0:root:/rootwestos:/root
test:x:0:0:root
redhat:x:0:0:westosroot
[[email protected] mnt]# grep -E "\<root\>" passwd 精确匹配root字符
root:x:0:0:root:/root:/bin/bash
westos:x:0:0:root:/root:/bin/bash
test:x:0:0:root:/rootwestos:/root
test:x:0:0:root
[[email protected] mnt]# grep -E -i "\<root\>" passwd 忽略大小写匹配root字符
root:x:0:0:root:/root:/bin/bash
westos:x:0:0:root:/root:/bin/bash
test:x:0:0:root:/rootwestos:/Root
test:x:0:0:root
[[email protected] mnt]# grep -E -i "^\<root\>" passwd 忽略大小写匹配root开头额行
root:x:0:0:root:/root:/bin/bash
[[email protected] mnt]# grep -E -i "\<root\>$" passwd 忽略大小写匹配root结尾的行
test:x:0:0:root:/rootwestos:/Root
test:x:0:0:root
[[email protected] mnt]# grep -E -i "root|ROOT" passwd 模糊过略root或ROOT字符
root:x:0:0:root:/root:/bin/bash
westos:x:0:0:root:/root:/bin/bash
test:x:0:0:root:/rootwestos:/Root
test:x:0:0:root
redhat:x:0:0:westosroot
2、…的使用(贪婪匹配)
grep -E "x.." file 查找file中有x且后面有两个字符的行
grep -E "x..\>" file 查找file中有x且后面只有两个字符的行
grep -E "\<x.." file 查找file中有x开头且后面有两个字符的行
grep -E "\<x..\>" file 查找file中有x开头且后面只有两个字符结尾的行
grep -E "\<..y\>" file 查找file中有两个字符开头且以y结尾的行
grep -E "..y\>" file 查找file中有两个字符在前面且y结尾的行
示例:
3、* ? {} , + 等字符的匹配查找
grep -E "x*y" file 查找file中x字符出现任意次后面有y的行
grep -E "x?y" file 查找file中x字符出现0到1次后面有y的行
grep -E "\<x?y" file 查找file中x出现1次开头以y结尾的行
grep -E "\<x{2}y" file 查找file中x出现两次下一个字符是y的行
grep -E "\<x{0,2}y" file查找file中x出现0到2次打头后面有y的行
grep -E "\<x+y" file 查找file中x最少出现1次以上且开头后面有y的行
grep -E "(xy)+" file 查找file中xy出现一次以上的行
grep -E "(xy)+\>" file 查找file中xy出现一次且结尾的行
示例:
二、sed行编辑器
用来操作ASCII码的文本,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,可以指定仅仅处理那些行。sed符合模式田间的处理,不符合的不处理,处理完成之后把缓冲区的内容送往屏幕,接着处理下一行,这样不断重复,知道文件末尾,不对原文件内容作修改
1、sed命令格式
sed 参数 命令 目标
p模式:显示
sed -n '/\#/p' fstab 显示fstab中包含#的行
sed -n '/UUID/p' fstab 显示fstab中包含UUID的行
sed -n '/^UUID/p' fstab 显示fstab中UUID开头的行
sed -n '/UUID$/p' fstab 显示fstab中UUID结尾的行
set -n '5p' fstab 显示fstab中的第五行
sed -n '3,5p' fatab 显示fstab中的第三到第五行
sed -n '3,5!p' fatab 显示除了第三行到第五行的其他行
sed -ne '3p;5p;8p'fstab 显示fstab中的第三,第五,第八行 -e为多条命令连接
sed -n '/\#/p' -i fstab 显示fstab中的包含#的行,并输入到fstab中
d模式:删除
sed '/^#/d' fstab 删除fstab中#开头的行并显示在屏幕
sed '/^UUID/d' fstab 删除fstab中UUID开头的行并显示
sed '/UUID$/d' fstab 删除fstab中UUID结尾的行并显示
sed '1,4d' fstab 删除fstab中第1到4行并显示其他行
sed '/^UUID/!d' fstab 删除除了UUID开头的行并显示
a模式:添加
sed '/UUID$/a hello' fstab 显示fstab内容并在UUID结尾的行后添加一行hello
sed '/UUID$/a hello\nsed\ntest' 显示fstab内容并在UUID结尾的行后添加一行hello和一行test
c模式:替换
sed '/^UUID/c/hello' /mnt/fstab 替换UUID开头的行为hello
w模式:插入
sed '/^UUID/w /mnt/hello' /mnt/fstab 将/mnt/fstab中的UUID开头的行输入到/mnt/hello中
sed的其他用法
sed '/^UUID/mnt/fstab='/mnt/fstab 显示UUID开头的行的行数
sed '6r /mnt/hello1' /mnt/fstab 将fstab中的第六行插入到hello1中
sed '6r /mnt/hello1' /mnt/fstab 最后一行
sed '1r /mnt/hello1' /mnt/fstab 第一行
sed 'r /mnt/hello1' /mnt/fstab 每一行
sed -n '/^UUID/=' fstab 显示行数
sed -n -e '/^UUID/p' -e '/^UUID/=' fstab多策略
sed -n -f westos fstab westos中为策略(/^UUID/p
/^UUID/=)
sed 's/\# *//g' fstab
sed '/by/,/See/s/\#\ *//g' fstab
sed 'G' fstab
sed '$!G' fstab
sed '=' fstab | sed 'N;s/\n//'
sed '=' fstab | sed 's/\n//'
sed -n '$p' fstab 显示倒数第一行
sed -n '4p' fstab 显示第四行
sed '/^UUID/c\hello' fstab
三、awk
awk -F : '/bash$/{ print $1 }' passwd 列出passwd文件以/bash结尾的行的第一列
awk -F : 'BEGIN{ print "NAME" }{ print $1 } END { print "END" }' passwd
awk -F : 'NR==3{ print $1 }' passwd 显示passwd第三行第一列
实现,列出eth0的ip
ifconfig eth0 | awk -F " " '/inet /{print $2}'
[[email protected] mnt]# ifconfig eth0 | awk -F " " '/inet /{print $2}'
172.25.254.177