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.txt
Marry   2143 78 84 77
Jack    2321 66 78 45
Tom     2122 48 77 71
Mike    2537 87 97 95
Bob     2415 40 57 62
cat test.awk
#!/bin/awk -f
#运行前
BRGIN{
math=0
english=0
computer=0
print “NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL\n”
print “---------------------------------------------\n”
}
#运行中
{
math+=$3
english+=$4
computer+=$5
print”%-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.txt
NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL
---------------------------------------------
Marry  2143     78       84       77      239
Jack   2321     66       78       45      189
Tom    2122     48       77       71      196
Mike   2537     87       97       95      279
Bob    2415     40       57       62      159
---------------------------------------------
  TOTAL:       319      393      350

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值