目录
正则表达式简介
正则表达式就是为了处理大量的文本字符串而定义的一套规则和方法。通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤,替换或输出需要的字符串。Linux正则表达式一般以行为单位处理。
基本正则表达式规则
基础正则表达式字符
. 表示单个字符
^ 表示开头,$表示结束
\<表示开头,\>表示结束
x\{m\}y 表示要查找出现m次x的xy的文件
x\{m,\}y 表示要查找出现大于m个x的xy的文件
x\{m,n\}y 表示要查找最少有m个x,最多有n个x的xy文件
sed工具(流编辑器)
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等
用法:sed '条件' 文件
例:sed ‘1,2d’ xx
sed -i '1,2d' xx
注:d表示删除,删除1~2行;这里的只是将删除之后的结果显示在屏幕上,实际并没有对源文件进行操作,如果想要直接操作源文件需要加上-i选项
例:sed 's/a/A/g' xx
注:将小写的a替换成大写的A
例:sed -e 's/root/ROOT/g' -e 's/bin/BIN/g' xx
注:如果有多出替换选项,需要在前面加上-e选项
例:
sed '/adm/ixxxxxxxxxxxxxx' xx 表示先找到含有adm的行,然后在adm的行上面加一行xxxxx
sed '/adm/axxxxxxxxxxxxx' xx 表示先找到含有adm的行,然后在adm的行下面加一行xxxxx
sed '/adm/cxxxxxxxxxxxxx' xx 表示先找到含有adm的行,直接将adm行替换成 xxxxx
注:i表示在查找行的上面添加,a表示在查找行的下面添加,c表示将查找行直接替换
sed也是支持正则表达式的:sed '/^root/axxxxxxxx' xx 表示先找到含有root开头的行,然后在下面加一行xxxxx
文件的格式化与相关处理
AWK工具
AWK是一种处理文本文件的语言,是一个强大的文本分析工具。
之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的Family Name的首字符。awk工具可以对文件中的内容进行排版
awk原理:awk将文件中的信息一行行读到缓存中去,命名为$0; 根据默认的空格或者Tab将每行信息分成一个个的字段;为$1、$2、$3...
用法:awk '条件{操作}' xx
例:awk -F: ‘{print $1}’ xx
注: -F指明分隔符;print打印$1的字段
结合管道取出IP地址信息:ifconfig | grep netmask | awk '{print $2}'
例:ifconfig | awk ‘{print NR, $0, NF}’
注:NR表示显示行号; NF表示显示每行字段个数,$0表示缓存中读取的一整行
awk进行条件筛选:
例:awk -F: '$3<=3 {print $1}' xx
注:打印以分号隔开的第三个字段小于等于3的$1字段
awk实现文本替换:
例:awk -F: 'BEGIN{OFS="\t\t"; ORS="\n\n\n"} {print $1 $2}' xx
注:BEGIN表示做一些开始的操作;OFS表示第一个字段和第二个字段之间的分隔符;ORS表示每行之间的分隔符
grep、sed、awk的总结
grep是用来对文件中的关键字进行过滤、查看;
sed可以直接用来修改文件;
awk是用来对用户选择的一部分内容进行排版,文本分析等;
文件比较:diff
例:diff xx yy
注:查看xx文件和yy文件的不同,如果没有输出则表示两个文件相同
原创文章,转载请注明出处