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