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