一、grep 文本过滤命令
1.定义
Global search regular expression and print out the line
全面搜索研究正则表达式并显示出来
grep 文本过滤命令是一种强大的文本搜索工具 , 根据用户指定的“模式”对目标文本进行匹配检查 , 打印匹配到的行
由正则表达式或者字符及基本文本字符所编写的过滤条件
2.grep 的格式
格式:
grep 匹配条件 处理文件
-i
##忽略大小写-E
##有"|“时,需要加-E,防止其被shell认成管道符-v
##不包含,反向匹配\<关键字\>
##不匹配关键字前后,只匹配关键字^关键字\>
##以关键字开头的行\<关键字$
##以关键字结尾的行^关键字\>|\<关键字$
##”|"表示或.*
##关键字之间匹配任意字符'w....s'
##w到s之间有4个字符'w..'
##w后有2个字符
例如:
1.将passwd里的含有root字符的行过滤出来
2.将passwd里的以root字符开头的行过滤出来
3.grep 中的正则表达式
^westos
##以westos关键字开头的westos$
##以westos关键字结尾的'w....s'
##w和s之间有4个字符'w.....'
##w后有5个字符'.....s'
##s之前有5个字符
4.grep 中字符的匹配次数设定
*
字符出现 [0- 任意次 ]\?
从前匹配,字符出现 [0-1 次 ]\+
从前匹配,字符出现 [1- 任意次 ]\<{n}
从前匹配,字符出现 [n 次 ]\<{m,n}
字符出现 [ 最少出现 m 次,最多出现 n 次 ]+\>
从后匹配,字符出现 [1- 任意次 ]
5.grep 中字符的匹配位置设定
^关键字
以关键字开头的行关键字$
以关键字结尾的行\<关键字
不匹配关键字前面的关键字\>
不匹配关键字后面的\<关键字\>
不匹配关键字前后,只匹配关键字
6.grep 正则表达式与egrp扩展正则表达式
正规的 grep 不支持扩展的正则表达式子 , 竖线是用于表示”或”的扩展正则表达式元字符 , 正规的 grep 无法识别;加上反斜杠 , 这个字符就被翻译成扩展正则表达式 , 就像 egrp和grep -E 一样
二、sed 行编辑器
1.定义:
stream editor
用来操作纯ASCII 码的文本
处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space)可以指定仅仅处理哪些行
sed 符合模式条件的进行处理,不符合条件的不予以处理
处理完成之后把缓冲区的内容送往屏幕
接着处理下一行,这样不断重复,知道文件末尾
2.sed 命令格式
sed [options] '模式条件' file
-i
输入到源文件中-n
表示抑制模式空间里内容的输出-e
分两次执行
3.sed 对字符处理的多种模式
01) p 模式操作(显示)
sed /^#/p fstab ##复制以#开头的行
sed -n /^#/p fstab ##复制以#开头的行并显示
sed -n '/^#/!p' fstab ##除了带#号的不显示,其余都显示
1.显示fstab文件的第2行到第6行
cat -n fstab | sed -n ‘2,6p’
2.只显示fstab文件的第6行
cat -n fstab | sed -n ‘6p’
3.显示fstab文件的第2行和第6行
cat -n fstab | sed -n -e ‘2p’ -e ‘6p’ 或者 cat -n fstab | sed -n -e “2p;6p”
4.除了不显示第2行到第6行外,其余的都显示
cat -n fstab | sed -n ‘2,6!p’
02)d 模式操作 (删除)
sed '/^#/d' fstab ##将以#开头的行删除
sed -ne '/^#/d' fstab ##将带#开头的行删除,并显示结果
1.删除fstab文件里以#开头的行以及空白行
sed -e ‘/^#/d’ -e ‘/^$/d’ fstab
2.删除fstab文件里的第4行到第6行
cat -n fstab | sed ‘4,6d’
3.删除fstab文件里的第4行和第6行
cat -n fstab | sed -e ‘4d;6d’
4.删除fstab文件里不以UUID开头的行
sed ‘/^UUID/!d’ fstab
03)a 模式操作 (在后面添加)
sed '/^UUID/ahello' fstab ##在UUID开头的行后加hello
sed '/^UUID/ahello\nwestos' fstab ##在UUID开头的行后加多行(\表示换行)
04)i 模式操作 (插入即在前面添加)
sed '/^UUID/ihello' fstab ##在UUID开头的行前插入hello
sed '/^UUID/ihello\nwestos' fstab ##在UUID开头的行前插入多行(\表示换行)
05)c 模式操作 (替换)
sed '/^#/chello' fstab ##将以#开头的行替换为hello
06)w 模式操作 (写入即整合)
sed '6r /mnt/hello' /mnt/fstab ##将hello文件里的所有内容添加到fstab文件的第6行
4.sed 的其它用法
01)行号与内容
sed -n '/^UUID/=' fstab ##显示以UUID开头的行的行号
sed -ne '/^UUID/=;/^UUID/p' fstab ##显示行号并显示内容
sed -ne '/^UUID/=;/^UUID/p' fstab | sed 'N;s/\n/ /g' ##将行号和内容一行显示(|前是两份输出,N表示提前将下一份输出的结果提取 "\n"表示换行符)
02)文件方式调用
vim rule
1 /^UUID/=
sed -nf rule fstab ##用文件调用,对fstab文件进行操作
vim rule
1 /^UUID/=
2 /^UUID/p
sed -nf rule fstab ##用文件调用,对fstab文件进行操作
03)更换
sed -i '=' passwd
sed -i 'N;s/\n/ /g' passwd
sed 's/nologin/bash/g' passwd ##更换全文的nologin为bash
sed '1,5s/nologin/bash/g' passwd ##换1-5行的nologin为bash
sed '5s/nologin/bash/g' passwd ##只换第五行
sed -e '5s/nologin/bash/g;3s/nologin/bash/g' passwd
sed '/daemon/,/mail/s/nologin/bash/g' passwd ##用字符作标准进行替换
替换/ 时 , 用@符代替
sed 's@\@ @g' passwd
04)加空行
sed 'G' passwd ##加空行
sed '$!G' passwd ##最后一行不加空行,其余都加
sed -n '$p' passwd ##打印最后一行