grep与正则,sed工具
一、grep -A -B —color=auto ‘查找字符’ filename
- -A后面可加数字,为after的意思,除了该行外,后续n行也列出来
- -B后面可加数字,为befer的意思,除了该行外,前面的n行也列出来
- -in 不论大小写,取得所查找的字符
- .(小数点)代表一定有一个任意字符
- *(星星号)代表重复前一个字符,0到无穷次
与通配符中的*意义不同,不能搞混
二、基础正则表达式字符集合
- ^word 要查找的字符串在行首
- word$ 要查找的字符串在行尾
- . 要一定有一个任意字符
- \ 转义符,将特殊符号的意义去除
- * 重复0个到无穷个的前一个RE字符
- [list] 字符集合的RE字符,里面列出想要选取的字符
- [n1-n2] 字符集合的RE字符,里面列出想要选取的字符范围
- [^list] 字符集合的RE字符,里面列出不要的字符范围
- \{n,m\}
-
- 连续n到m个的前一个RE字符
- 若为\{n\},则是连续n个的前一个RE字符
- 若为\{n,\},则是连续n个以上的前一个RE字符
三、sed工具
sed 【-n e f r i 】【操作】
选项参数
- -n 使用安静模式,加上n后,则只有经过sed特殊处理的那一行才会被列出来
- -e 直接在命令行模式上进行sed的操作编写
- -f 直接将sed的操作写在一个文件内,-f filename则可以执行filename内的sed操作
- -r sed的操作使用的是扩展型正则表达式的语法
- -i 直接修改读取的文件内容,而不是由屏幕输出
操作
- [n1[,n2]] function 不一定存在n1,n2,为确定操作行数范围
function包含下面这些:
-
- a 新增,a的后面可以接字符,而这些字符会在新的一行出现(目前的下一行)
- c 替换,c的后面可以接字符,这些字符可以替换n1,n2之间的行
- d 删除,因为是删除,所以d后面不接任何东西
- i 插入,i的后面可以接字符,而这些字符会在新的一行出现(目前的上一行)
- p 打印,亦即将某个选择的数据打印出来,通常p会与参数sed -n一起运行
- s 替换,可以直接进行替换的工作,通常这个s的操作可以搭配正则表达式
- 新增多行的时候,需要在行末增加\
- n1 /etc/passwd | sed -n ‘5,7p’ 显示5-7行
- sed ’s/要被替换的字符/新的字符/g'
-
- ifconfig eth0 | grep ‘inet ‘ | sed ’s/^.*inet //g’ 删除ip前后多余的字符
- cat /etc/man_db.conf | grep 'MAN' | sed 's/#.*$//g' | sed '/^$/d’ 包含MAN的,且不要含有#的注释,空白行也不要
四、扩展正则表达式
- + 重复一个或一个以上的前一个RE字符
- ?0个或1个的前一个RE字符
- | 用或的方式找出数个字符串
- ()找出群组字符串
- ()+ 多个重复群组的判别
五、格式化打印
- printf ‘%s\t %s\t %s\t %s\t %s\t \n’ $(cat printf.txt) %s代表一个长度不固定的字符串
- printf ‘%10s %5i %5i %5i %8.2f \n’ $(cat printf.txt) %10s代表长度为10个字符的字符串字段,%5i代表长度为5个字符的数字字段,%8.2f则代表长度为8个字符的具有小数点的字段,其中小数点由两个字符宽度,小数点本身占一个字符宽度。