Linux三剑客grep、sed、awk

发布于 2020-12-21  1,303 次阅读


Linux中最重要的三个命令在业界被称为“三剑客”,它们是awk,sed,grep。

我们现在知道Linux下一切皆文件,对Linux的操作就是对文件的处理,那么怎么能更好的处理文件呢?这就要用到我们上面的三剑客命令

  • grep 搜索过滤
  • sed 文件行操作
  • awk 文件列操作

grep,sed,awk操作都离不开正则表达式

正则表达式

元字符 功能 意思
^ 匹配行首 表示以某个字符开头
$ 匹配行尾 表示以某个字符结尾
^$ 空行 表示开头结尾都是空
. 匹配任意一个单字符 匹配任意单个字符
* 匹配0个或者多个字符 表示重复的任意多个字
\ 屏蔽一个元字符的特殊含义 转义
[] 匹配中括号内的内容 过滤括号内的字符
.* 匹配任意多个字符 匹配所有

1.grep

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户

格式
grep [options]

主要参数
[options]主要参数:

--color=auto 对匹配到的文本着色显示
-v 显示不被pattern匹配到的行
-i 忽略字符大小写
-n 显示匹配的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-A # after, 后#行
-B # before, 前#行
-C # context, 前后各#行
-e 实现多个选项间的逻辑or关系
grep –e ‘cat ’ -e ‘dog’ file
-w 匹配整个单词
-E 使用ERE,相当于egrep
-F 相当于fgrep,不支持正则表达式

eg:

ps -ef|grep python|grep -v grep #配合管道使用,表示查看当前python进程,并排除掉grep命令自身

grep命令是Linux命令中使用非常高频的一个命令,几乎是天天用到

2.sed

sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’ 的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

sed命令格式

sed [-nefr] [动作]

选项与参数:
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来(不输出模式空间内容到屏幕,即不自动打印)。
-e :直接在命令列模式上进行 sed 的动作编辑(多点编辑); 
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作(从指定文件中读取编辑脚本);
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端(直接编辑文件,危险动作)
-i.bak: 备份文件并原处编辑
sed 'root' /etc/passwd  # 遍历passwd每行匹配root,会打印原行
sed -n 'root' /etc/passwd # 同上,不会打印原行
sed -n '/root/p' /etc/passwd # 正则每行匹配root,匹配成功则打印

正则匹配

sed -n -r '/chenshiyang|CHENSHIYANG/p' test.txt

直接修改内容

sed -i 's@chenshiyang@chenshiyang1@g' test.txt

sed 动作说明 :[n1, [n2]] function

n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』
function: 
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行) 
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚; 
c :替换行为单行或多行文本
= :为模式空间中的行打印行号
i :插入i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~