linux常用文本命令-三剑客(sed、grep、awk)

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暂时使用较少,下次使用再更新。

发布了54 篇原创文章 · 获赞 4 · 访问量 1039

猜你喜欢

转载自blog.csdn.net/buzhiquxiang/article/details/103543626