1.GREP(Global search regular expression and print out the line的缩写)
是一种强大的文本搜索工具
它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行
Unix的grep家族包括grep、egrep和fgrep,Windows系统下类似命令FINDSTR
#1)GREP的模式(贪婪模式的匹配)
贪婪模式:只要含有被指定的关键字都会被打印,哪怕搜索的关键字是某字符的一部分
cp /etc/passwd /mnt
cd /mnt
将passwd文件复制到/mnt,在/mnt下进行命令实验
vim passwd 用vim编辑器删除一部分内容,留下一部分用于实验
grep root passwd 搜索全文中的root
grep ^root passwd 搜索全文中以root开头的
grep bash$ passwd 搜索全文中以bash结尾的
grep -i root passwd 忽略大小写
grep -E "^root|bash$" passwd 同时匹配多个条件。grep -E = egrep
#2)grep中的正则表达式
grep 中字符的匹配次数设定
*字符出现 [0- 任意次 ]
\?字符出现 [0-1 次 ]
\+字符出现 [1- 任意次 ]
\{n\}字符出现 [n 次 ]
|{m,n\} 字符出现 [ 最少出现 m 次,最多出现 n 次 ]
\{0,n\}字符出现 [0-n 次 ]
\{m,\}字符出现 [ 至少 m 次 ]
\(xy\)\{n\}xy 关键字出现 [n 次 ]
.*关键字之间匹配任意字符
例:
vim file
编辑一个测试用的文件
grep ab file 贪婪模式的打印
grep a*b file 打印a和b之间含有任意字符的行
grep -E 'a?b' file 打印b前面出现0-1次a的行
grep -E 'a+b' file 打印b前面至少出现一次a的行
#3)贪婪模式的搜索和避免贪婪模式
vim file1 编辑实验文件
grep -E root file1 贪婪模式下都会被搜索到,哪怕是含有root的其他字符串
\< | \> 可以阻止贪婪模式
grep -E "\<root" file1
grep -E "root\>" file1
#############################
2.sed行编辑器
SED是一项Linux指令,功能同awk类似,差别在于,sed简单,对列处理的功能要差一些,awk的功能复杂,对列处理的功能比较强大 sed用来操作纯 ASCII 码的文本 处理时 , 把当前处理的行存储在临时缓冲区中 , 称为“模式空间” (pattern space) ,可以指定仅仅处理哪些行 sed 符合模式条件的处理,不符合条件的不予处理,处理完成之后把缓冲区的内容送往屏幕 接着处理下一行 , 这样不断重复 , 直到文件末尾 原来的内容是在磁盘当中放着,现在用sed命令处理的时候将内容掉入内存的一个地方用户处理,这个处理空间也叫模式空间
调用 sed 命令有两种形式
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)
sed对字符的处理:
#1)p 模式
cp /etc/fstab /mnt
vim fstab 为方便实验删除第一行空行,并且手动给其他行数添加行号
sed -n '/#/p' fstab 显示带有 # 的行
sed -n '/UUID$/p' fstab 显示 UUID结尾的行
sed -n '/^UUID/p' fstab 显示 UUID 开头的行
sed -n '2,6p' fstab 显示 第2-6行
sed -n '2,6!p' fstab 显示除了第2-6行
-n 表示屏蔽 模式空间的显示
例:
#2)d模式
sed '/^UUID/d' fstab 除了以UUID开头的都显示
sed '/^#/d' fstab 除了以# 开头的都显示
sed '1,4d'fstab 除了1-4行都显示
sed '/^UUID/!d' fstab 不显示 除了以UUID开头的
#3)a模式
sed '/^UUID/ahello westos' fstab 在以UUID开头的行下面添加内容hello westos
sed '/^UUID/ahello\nwestos fstab'
在以UUID开头的行下添加内容第一行hello第二行westos
#4) i 插入
sed '/^UUID/ihellowestos fstab'
在以UUID开头的行上面插入内容hellowestos
sed '/^UUID/ihello\nwestos fstab'
在以UUID开头的行上面插入内容第一行hello第二行westos
#5) c 模式
sed '/^#/chello westos' fstab
将以#开头的行全部替换为hellowestos
#6)w模式
vim file
sed '/^UUID/w file fstab 将以UUID开头的行写入 fstab
sed -n '/^UUID/w file fstab
sed '/^UUID/=' fstab 显示原文并显示以UUID开头行的行号
sed '6r file1' fstab 将文件file1的内容添加到fstab的第六行下
#7)sed的其他用法
sed -n '/^UUID/=' fstab 显示以UUID开头的行是第几行
vim rulesfile
屏蔽以UUID开头的行并替换以#开头的行 为westos
sed -f rulesfile fstab
sed 's/^#/\//g'fstab 将所有#替换为/
sed 'G' fstab 在显示的内容中每一行都添加一行空格
sed '$!G' data
sed '=' data | sed 'N; s/\n/ /'
sed -n '$p' data
##################################
3.awk
awk处理机制:awk会逐行处理文本,支持在处理第一行之前做一些准备工作,以及在处理完最后一行做一些总结性质的工作,然后将结果展现给用户.
awk的使用:
cp /etc/passwd /mnt
cd /mnt
vim passwd 删除一部分剩下的实验awk命令
awk -F : '{print $1}' passwd
打印passwd文件,指定以:为分隔符的第一列字符
awk -F : '{print $1,$2}' passwd 打印第一列和第二列
awk -F : 'BEGIN{print "westos"}{print $1}' passwd
打印第1列,并且在最前面加上westos
awk -F : 'BEGIN{n=1}{print $2,n++}' passwd打印第二列,并且编号
$num 和 n++ 的先后输入顺序就是显示的顺序
awk -F : 'BEGIN{n=1}{print n++,$1}END{print “over”}' passwd
打印第一列,并作编号,在最后面写上over
awk -F : '/bash/{print$1}' passwd 输出包含bash的行的第一列
awk '/^[a-d]/{print}' passwd 输出以a到d开头的行
awk '/^[^a-d]/{print}' passwd 输出不是以a到d开头的所有的行
awk '/^r|bash$/{print}' passwd 输出以r开头或者以bash结尾的行
awk -F : '$6~/bin$/{print}' passwd 打印第六列以bin结尾的行
ifconfig eth0 | awk '/inet\>/{print $2}' 使用一条命令只显示当前主机ip