sed正则表达式
sed是一种非交互式的流编辑器,可动态编辑文件。所谓的非交互式是说,sed和传统的文本编辑器不一样,并不是和使用者直接互动,sed处理的对象是文件的数据流。sed的工做模式是,比对每一行数据,若符合样式,就执行指定的操做。编辑器
经常使用的sed命令:工具
选项与参数:
-n :使用安静(silent)模式。在通常 sed 的用法中,全部来自 STDIN 的数据通常都会被列出到终端上。但若是加上 -n 参数后,则只有通过sed 特殊处理的那一行(或者动做)才会被列出来。
-e :直接在命令列模式上进行 sed 的动做编辑;
-f :直接将 sed 的动做写在一个文件内, -f filename 则能够运行 filename 内的 sed 动做;
-r :sed 的动做支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端。命令行
function:
a :新增, a 的后面能够接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面能够接字串,这些字串能够取代 n1,n2 之间的行!
d :删除,由于是删除啊,因此 d 后面一般不接任何咚咚;
i :插入, i 的后面能够接字串,而这些字串会在新的一行出现(目前的上一行);
p :列印,亦即将某个选择的数据印出。一般 p 会与参数 sed -n 一块儿运行~
s :取代,能够直接进行取代的工做哩!一般这个 s 的动做能够搭配正规表示法!例如 1,20s/old/new/g 就是啦!code
sed '1,4d' 1.log //删除1到4行数据,剩下的显示出来。d是sed的删除命令。这里的删除并非修改了源文件 sed '$d' 1.log //删除最后一行 sed '/LA/d' 1.log //删除匹配到包含'LA'字符行的数据,剩下的显示。//表明搜索 sed '/[0-9]\{3\}/d' 1.log //删除包含三位数字的行,注意{3}个数指定的大括号转义 sed '/LA/!d' 1.log // 反选 ,把不含LA行的数据删除 sed '/^$/d' 1.log //删除空白行 //若是想显示匹配到的呢? sed '/a/p' 1.log //因为默认sed也会显示不符合的数据行,因此要用-n,抑制这个操做 sed -n '/a/p' 1.log //替换字符,把a替换成A sed -n 's/a/A/p' 1.log //s是替换的命令,第一个//中的字符是搜索目标(a),第二个//是要替换的字符A //上面的只会替换匹配到的第一个,若是我想全部替换呢 sed -n 's/a/A/gp' 1.log // g 全局替换 sed -n 's/a//gp' 1.log //删除全部的a sed -n 's/^...//gp' 1.log //删除每行的前三个字符 sed -n 's/...$//gp' 1.log //删除每行结尾的三个字符 sed -n 's/\(A\)/\1BC/gp' 1.log // 在A后面追加BC,\1表示搜索里面括号里的字符 sed -n '/AAA/s/234/567/p' 1.log //找到包含字符AAA这一行,并把其中的234替换成567 sed -n '/AAA/,/BBB/s/234/567/p' 1.log //找到包含字符AAA或者BBB的行,并把其中的234替换成567 sed -n '1,4s/234/567/p' 1.log //将1到4行中的234.替换成567 cat 1.log | sed -e '3,$d' -e 's/A/a/g' //删除3行之后的数据,并把剩余的数据替换A为a sed -i '1d' 1.log //直接修改文件,删除第一行 sed -i '2i 123Abc' 1.log //在第一行和第二行间插入一行123Abc sed -i '2a 123Abc' 1.log //在第二行和第三行间插入一行 123Abc
awk对象
awk是一种能够处理数据、产生格式化报表的语言。awk的工做方式是读取数据文件,将每一行数据视为一条记录,每条记录以分隔符分红若干字段,而后输出。队列
awk的平常用法:进程
awk经常使用的格式:字符串
1. awk '样式' 文件,把符合样式的数据显示出来。io
2. awk '{操做}' 文件,对每一行都执行{}中的操做。
3. awk '样式{操做}' 文件,对符合样式的数据进行括号里的操做。
awk内置变量
ARGC 命令行参数个数 ARGV 命令行参数排列 ENVIRON 支持队列中系统环境变量的使用 FILENAME awk浏览的文件名 FNR 浏览文件的记录数 FS 设置输入域分隔符,等价于命令行 -F选项 NF 浏览记录的域的个数 NR 已读的记录数 OFS 输出域分隔符 ORS 输出记录分隔符 RS 控制记录分隔符
ps aux | awk '{print $2}' //获取全部进程PID awk '/La/' 1.log // 显示含La的数据行 awk '{print $1, $2}' 1.log //显示每一行的第1和第2个字段 awk '/La/{print $1, $2}' 1.log //将含有La关键词的数据行的第1以及第2个字段显示出来 awk -F : '/^root/{print $1, $2}' /etc/passwd awk 'BEGIN {count=0}{count++} END{print count}' /etc/passwd //统计用户数 //BEGIN后紧跟的操做,在awk命令开始匹配第一行时执行,END后面紧跟的操做在处理完后执行 awk -F ':' 'BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i < NR; i++) print i, name[i]}' /etc/passwd //显示全部帐户 awk -F : 'NR > 1 && NR <=5 {print $1}' /etc/passwd //显示一到五行
grep
grep文本搜集工具, 结合正则表达式很是强大。
-c : 只输出匹配的行
-I : 不区分大小写
-h : 查询多文件时不显示文件名
-l : 查询多文件时, 只输出包含匹配字符的文件名
-n : 显示匹配的行号及行
-v : 显示不包含匹配文本的全部行(我常常用除去grep自己)
grep经常使用命令
grep 'test' d* //显示全部以d开头的文件中包含test的行 grep 'test' aa bb cc //显示在 aa bb cc 文件中包含test的行 grep '[a-z]\{5}\' aa //显示全部包含字符串至少有5个连续小写字母的串