SHELL编程(三) sed和awk的用法
1.sed1.1 sed的作用sed是strea editor的简称,是一种在线编辑器,它每次处理一行的内容,把当前处理的行存储在模式空间(缓冲区)中,接着使用sed命令处理缓冲区的内容,处理完以后,把缓冲区的内容送往屏幕,接着处理下一行,这样不断重复,直到文件末尾。文件的内容没有发生改变,除非使用重定向向存储输出。 sed主要用来自动编辑一个或多个文件,简化对文件的反复操作。 语法: sed [options] '[command]' [filename]
options: command: 1.2 显示文件的第n行sed -n "np" filename #n为要显示的行号
例如,显示file.txt的第三行: sed -n "3p" file.txt
1.3 显示文件前n行sed -n "1,np" filename
例如,显示file.txt的前三行: sed -n "1,3p" file.txt
1.3 显示前n行以外的内容sed -n '1,n! p' filename
例如:显示file.txt除前三行意外的内容: sed -n "1,3! p" file.txt
1.4 显示文件第n后和之后的m行sed -n "n,-mp" filename
例如,显示文件的第三行和第三行后面的四行: sed -n "3,+4p" file.txt
1.5 在第n行前面插入内容命令: sed "n i content " filename
例如,向file.txt的第三行插入字符串“abc”: sed "3 i abc" file.txt
1.6 替换文件的第n行命令: sed 'n c content' filename
例如,把文件的第三行替换为abc: sed '3 c abc' file.txt
1.7 在文件的最后插入行sed "$ a content" filename
例子,在file.txt的最后一行插入字符串“abc”: sed " $ a abc " file.txt
1.8 复制粘贴例如,把文件的第2行到第4行复制粘贴到文件的第10行: sed "2,4H; 10G" file.txt
把文件的第2行到第4行复制粘贴到文件末尾: sed "2,4H; $G" file.txt
1.9 删除空行sed '/^$/d' a.txt > b.txt
1.10 查找并保存查找包含特定字符的行并保存: sed '/5/ w new.txt' file.txt
1.11 文件重定向sed不会改变文件的内容,如果想保留编辑的内容,使用重定向。 sed -n '3,+4p' file.txt >a.txt
2.awk2.1 简介awk是一种优良的文本处理工具,Linux及Unix环境中功能最强大的数据处理引擎之一。 awk的语句都是由模式和动作组成的,一个awk脚本可以有多个语句,模式决定动作语句的触发条件和触发时间。 特殊字段; 2.2 自定义显示年月日[root@iz2zeisjfk2rw89yhp3g19z shtest]# date
Tue May 1 18:42:41 CST 2018
[root@iz2zeisjfk2rw89yhp3g19z shtest]# date | awk '{print "Year:"$6 "t Month:"$2 "tday:" $3}'
Year:2018 Month:May day:1
2.3 awk文件操作把下面的内容写入result.txt: andy 4 85 92 78 94 88
bob 6 89 90 75 90 86
claire 9 84 88 80 92 84
dave 5 94 52 84 86 NA
[root@iz2zeisjfk2rw89yhp3g19z shtest]# awk '{print $0}' result.txt
andy 4 85 92 78 94 88
bob 6 89 90 75 90 86
claire 9 84 88 80 92 84
dave 5 94 52 84 86 NA
[root@iz2zeisjfk2rw89yhp3g19z shtest]# awk '{print $1}' result.txt
andy
bob
claire
dave
显示result.txt的第一列和第三列: awk '{print $1,$3}' result.txt
打印文件头和文件尾: awk 'BEGIN{print "name level result"}{print $1,$2,$3} END{print "end of the file"}' result.txt
结果: [root@iz2zeisjfk2rw89yhp3g19z shtest]# awk '$2 >= 5' result.txt
bob 6 89 90 75 90 86
claire 9 84 88 80 92 84
dave 5 94 52 84 86 NA
以冒号作为分隔符,打印/etc/passwd的第一列 awk -F":" '{ print $1 }' /etc/passwd
2.4 判断多个条件或条件: awk '{if($1=="andy" || $2=="9") print $0}' result.txt
与条件: awk '{if($1=="andy" && $2=="9") print $0}' result.txt (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |