grep,sed,awk三剑客(复习)

grep
是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来
选项:

-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
-s:不显示错误信息
-w:只显示全符合的列
-o:只输出匹配到的部分

sed
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。
选项:

-n∶使用安静(silent)模式。
-e∶直接在指令列模式上进行 sed 的动作编辑;
-f∶直接将 sed 的动作写在一个档案内,-f filename 则可以执行filename 内的sed 动作;
-r∶sed 的动作支持的是延伸型正规表示法的语法。
-i∶直接修改读取的档案内容,而不是由屏幕输出。

命令:

a \"string":在指定的行后面追加新行,内容为string 例如 a \newline
i \"string":在指定的行前面追加新行,内容为string 例如 i \newline
d:删除符合条件的行i
p:显示符合条件的行
c:替换匹配到的文本
s:替换指定字符
h:拷贝模板块的内容到内存中的缓冲区。
g:获得内存缓冲区的内容,并替代当前模板块中的文本。
q:退出Sed
r file:将指定的文件的内容添加至符合条件的行
w file:将指定范围内的内容另存至指定的文件中
=:打印当前行号码
n:读取下一个输入行,用下一个命令处理新的行而不是用第一个命令

替换:

g:表示行内全面替换。  
p:表示打印行。  
w:表示把行写入一个文件。  
x:表示互换模板块中的文本和缓冲区中的文本。  
y:表示把一个字符翻译为另外的字符(但是不用于正则表达式)
\1:子串匹配标记
&:已匹配字符串标记

awk
相较于sed 常常作用于一整个行的处理,awk 则比较倾向于一行当中分成数个『字段』来处理。 因此,awk 相当的适合处理小型的数据数据处理
工作原理:
第一步:执行BEGIN{ commands }语句块中的语句;
第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ commands}语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
第三步:当读至输入流末尾时,执行END{ commands }语句块。
脚本结构:
awk ‘BEGIN{ print “start” } pattern{ command } END{ print “end”}’ file(文件)
选项:

-F:指明输入时要用到的字段分隔符
-v:var=value:自定义变量
-f:从脚本中读取awk命令

内置变量;

$n 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。
$0 这个变量包含执行过程中当前行的文本内容。
FNR 同NR,但相对于当前文件。
FS 字段分隔符(默认是任何空格)
NF 表示字段数,在执行过程中对应于当前的字段数
NR 表示记录数,在执行过程中对应于当前的行号
OFS 输出字段分隔符(默认值是一个空格)
RS 记录分隔符(默认是一个换行符)
ORS 输出记录分隔符(默认值是一个换行符)

控制语句:
if语句

awk -F: '{if($1~/mail/) print $1}' /etc/passwd (简写)                                  
awk -F: '{if($1~/mail/) {print $1}}'  /etc/passwd (全写)                                
awk -F: '{if($1~/mail/) {print $1} else {print $2}}'/etc/passwd  (if...else...)

while语句

awk -F: 'BEGIN{i=1} {while(i<NF) print NF,$i,i++}' /etc/passwd 

for语句

awk '{for(i=1;i<=NF;i++){print $i}}' /etc/password

awk语句中的格式化输出
选项:

%c:显示ASCII码
%d:显示十进制证书
%e:科学计数法
%f:浮点数
%s:显示字符串
%u:显示无符号整数
%%:显示%自身

awk语句中的内置函数

rand():0到1之间的随机数
length():字符串长度
split($0,A,":"):将 String 参数指定的参数分割为数组元素 A[1], A[2], . . ., A[n],并返回 n 变量的值
substr(s,p):返回字符串s中从p开始的后缀部分
substr(s,p,n):返回字符串s中从p开始长度为n的后缀部分

猜你喜欢

转载自blog.csdn.net/wangyeshun/article/details/82562688