grep:适合单纯的查找和匹配文本
sed:适合编辑匹配到的文本
awk:适合格式化文本,对文本进行较复杂格式处理
(一)sed命令:利用脚本来处理文本文件,自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等。
语法形式:
sed [-hnv][-e<script>][-f<script文件>][文本文件]
//-h 显示帮助 -n或者-quiet 仅显示script处理后的结果 -v版本信息
//-e<script文件>以选项中指定的script来处理文本文件
//-f<script文件>以选项中的script文件来处理文本文件
参数说明:
sed -a :新增, a后面可以接字符串,这些字符串会在新的一行出现(目前的下一行)
sed -c :取代, c后面可以接字符串,这些字符串可以取代n1,n2之间的行
sed -d :删除,(常不接任何东西)
sed -i :插入,i后面可以接字符串,这些字符串会在新的一行出现(目前的上一行)
sed -p :打印
sed -s :取代,可以搭配正规表示法,例如1,20s/old/new/g 即全局用new来取代old
例如:使用cat命令显示如下test文件
(1)如果输入sed -a的新增命令
sed -e 4a\newline test
(2)如果输入sed -i的插入命令
sed -e 4i\newline test
(3)以行为单位的新增和删除
(1)删除2-5行
sed '2,5d' test
(2)只删除第二行
sed '2d' test
(3)删除第三行到最后一行
sed '3,$d' test
(4)在第二行后加上 drink tea ,如果是第二行前就将2a改为2i
sed '2a drink tea' test
(5)如果要增加两行以上
sed '2a drink tea or \
> beer' test
#注意需要增加两行以上每一行都必须用反斜杠来增加
(4)以行为单位的替换与显示
用字符串 number 取代2至4行
sed '2,4c number' test
仅显示2至4行
sed -n '2,4p' test
(5)数据搜索
(1)显示
在文本中搜索linux
sed -n '/linux/p' test
#如果不加-n,会先显示所有的文本再显示找到含有linux的那一行
(2)删除
在文本中删除linux
sed '/linux/d' test
(3)替换
sed 's/要被取代的字串/新的字串/g'
(4)执行命令
找到linux所对应的行,执行后面花括号的命令。
sed -n '/linux/{s/bash/blueshell/;p;q}' test
(5)多点编辑
一条sed命令,删除第三行到末尾的数据,并把bash替换为buleshell
sed -e '3,$d' -e 's/bash/buleshell/' test
注意:在sed命令可以直接修改文件内容,不必使用管道命令或数据重导向(但是必须在root权限下)
在sed命令中$表示最后一行,\表示空格
(二)grep:用于查找文件中符合条件的字符串
grep 语法
grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][范本样式][文件或者目录]
#-a :
#-A :after-context 除了显示范本样式那一列,并显示该行之后的内容
#-b :
#-B :before-context
#-c :
#-C :显示该行前后的内容
#-d :当指定查找的是目录而非文件,否则grep不能运行
#-e :指定字符串为查找文件内容样式
#-E:正则表达式
#-f:
#-i:ignore case忽略字符大小写的差别
#-I:file with match
#-L:file without match
#-n:line number 找到符合条件的那一行并显示编号
#-o:只显示匹配PATTERN部分
#-q:不显示任何信息
#-r:recursive 与-d作用相同
#-v:显示不包含匹配文本的所有行
(1)在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。
grep test *file
(2)以递归的方式查找符合条件的文件。例如,查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件,并打印出该字符串所在行的内容,使用的命令为:
grep -r update /etc/acpi
(3)反向查找:查找文件名中包含 test 的文件中不包含test 的行,此时,使用的命令为:
grep -v test *test*
(三)awk
awk 语法
awk [选项参数] 'script' var=value file(s)
或者
awk [选项参数] -f scriptfile var=value file(s)
用法一:
awk '{[pattern] action}' {filename} #行匹配语句awk只能使用单引号
(1)按列输出第一项和第四项
其中log.txt文件内容如下:
awk命令:
awk 'print $1 $4' log.txt
目前awk暂时使用较少,下次使用再更新。