sed,awk,grep教程

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个连续小写字母的串
相关文章
相关标签/搜索