AI智能
改变未来

Shell复习 — grep sed awk


Grep

grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。

语法

grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]

常用的参数

A 现实行数
-i 忽略大小写

Sed

Linux sed 命令是利用脚本来处理文本文件。
sed 可依照脚本的指令来处理、编辑文本文件。
Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

语法

sed [-hnV][-e<script>][-f<script文件>][文本文件]

常用情况

添加

sed -e 3a\\newline testfile 	#在第三行后添加新的字符“newline”串
sed ‘2a drink tea’ testfile		#在第二行后添加 drink tea
sed ‘2a drink tea or\\drink coffee?’	#在第二行添加drink tea or 第三行添加 drink coffe

删除

sed ‘2,5d’ testfile 			#删除2~5行
sed ‘3,$d’ testfile			#删除3到最后一行 $末尾的意思
sed ‘2,5c No 2~5 lines’ testfile	#删除2~5行并添加no 2~5 lines 实际上c是取代(一般是行操作) c是替换 d是删除
sed ‘2,5p’ testfile				#仅显示2~5行
sed ‘/root/p’ testfile 			#查找含root的行,显示所有行sed -n ‘/root/p’ testfile 		#显示和root相关行
sed ‘/root/d’ testfile			#删除含有root的行

替换

sed ‘s/要被替换的内容/新的内容/g’
sed -n ‘/root/ {s/bash/test/;p;q}	#查找含root的行并把bash替换成test s是替换 p是打印 q是退出
grep ‘ip’ testfile|sed ‘s/^.*ip//g’|sed ‘s/bcast.*$//g’ 	#查找有ip的行,删除字符ip和之前以及字符bcast和之后的所有内容 (只保留ip地址)
sed -i’s/\\.$/\\!/g testfile 		#把行尾的.替换成!

Awk

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。

语法

awk [选项参数] \'script\' var=value file(s)或awk [选项参数] -f scriptfile var=value file(s)

常用情况

awk ‘{print $1,$4}’ test.txt 		#按空格或者tab分割输出1,4项
awk ‘{print “%-8s %10s\\n”,$1,$4} test.txt 	#格式化输出,第一个占8个字符 第二个占10个字符(不是空格的长度)
awk -F , ‘{print $1,$2,$4} test.txt 	#按,分割输出1,2,4项

指定输出分隔符

awk ‘{print NR, $1,$2,$4} OFS=“$” test.txt	#输出时用$代替空格分割字符
awk ‘/re/‘ test.txt 		#输出包含re的所有行
awk ‘$2 ~ /th {print $2, $4} test.txt 	#输出第二列包含th的行的2,4项

awk脚本

$ cat score.txtMarry   2143 78 84 77Jack    2321 66 78 45Tom     2122 48 77 71Mike    2537 87 97 95Bob     2415 40 57 62
cat test.awk#!/bin/awk -f#运行前BRGIN{math=0english=0computer=0print “NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL\\n”print “---------------------------------------------\\n”}#运行中{math+=$3english+=$4computer+=$5print”%-6s %-6s %-4s %-8d %-8d %-8d\\n”,$1,$2,$3,$4,$5,$3+$4+$5}END{print ”---------------------------------------------\\n”print “TOTAL:%10d %8d %8d\\n”,math,english,computer}
$ awk -f text.awk score.txtNAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL---------------------------------------------Marry  2143     78       84       77      239Jack   2321     66       78       45      189Tom    2122     48       77       71      196Mike   2537     87       97       95      279Bob    2415     40       57       62      159---------------------------------------------TOTAL:       319      393      350

参考文献
https://www.runoob.com/linux/linux-comm-awk.html

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Shell复习 — grep sed awk