Linux三剑客 grep sed awk 详细使用方法

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

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

    在说这三个命令前我们要插入一个小插曲就是“正则表达式”。

一、正则表达式

    所谓的正则表达式我个人理解就是正规的表示方法。他是用简单的方法来实现强大的功能,所以深受计算机爱好者的使用。

    三剑客与正则表达式是什么关系呢?

    我们可以这样理解,三剑客就是普通的命令,有的把他们叫做工具,在我看来都一样。而正则表达式就好比一个模版。三剑客能读懂这个模版。就这么简单。注意只有三剑客才能读懂这个模版哦!

    现在他们的关系和功能都搞懂了,接下来我们就来认识下他们怎么结合的。正则表达式是一个模版,这个模版是由一些普通字符和一些元字符组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义。具体如下

元字符                        功能                                                         意思

^                                 匹配行首                                                  表示以某个字符开头

$                                 匹配行尾                                                  表示以某个字符结尾

^$                               空行的意思                                              表示空行的意思

 .                                 匹配任意单个字符                                   表示任意一个字符

*                                 字符*   匹配0或多个此字符                     表示重复的任意多个字

\                                  屏蔽一个元字符的特殊含义                   表示去掉有意义的元字符的含义

[]                                 匹配中括号内的字符                              表示过滤括号内的字符

.*                                代表任意多个字符                                   就是代表任意多个字符

lele\{n\}                       用来匹配前面lele出现次数。n为次数       就是统计前面lele出现的次数

lele\{n,\}                      含义同上,但次数最少为n                 

lele\{n,m\}                   lele出现次数在n与m之间

三剑客的功能非常强大,但我们只需要掌握他们分别擅长的领域即可:grep擅长查找功能,sed擅长取行和替换。awk擅长取列。

二、grep

1.作用

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

2.格式

grep [options]

3.主要参数

[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,不支持正则表达式

测试:

grep     匹配条件   处理文件

grep root passwd ##贪婪匹配

grep ^root passwd ##以root开头

grep bash$ passwd ##以bash结尾

grep -i root passwd ##忽略大小写

grep -E "root|ROOT" passwd ##后面条件可以是一个正则表达式

cat -b passwd | grep mail ##默认显示mail所在行

cat -b passwd | grep mail -2 ##查看mail及上下两行

cat -b passwd | grep mail -A2 ##查看mail及下两行

cat -b passwd | grep mail -B2 ##查看mail及上两行

'ws'

'w...s'

'w.....'

'.....s'

三、sed

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

1.sed命令格式

sed [option]...'script'inputfile

(1)选项

-n 不输出模式空间内容到屏幕,即不自动打印

-e 多点编辑

-f /PATH/SCRIPT_FILE: 从指定文件中读取编辑脚本

-r 支持使用扩展正则表达式

-i 直接编辑文件

-i.bak 备份文件并原处编辑

(2)script 地址定界

不给地址:对全文进行处理

单地址:

#: 指定的行,$:最后一行

/pattern/:被此处模式所能够匹配到的每一行

地址范围:

#,#

#,+#

/pat1/,/pat2/

`#,/pat1/

~:步进

1~2 奇数行

2~2 偶数行

(3)编辑命令:

d 删除模式空间匹配的行,并立即启用下一轮循环

p 打印当前模式空间内容,追加到默认输出之后

a [\]text1 在指定行后面追加文本,支持使用\n实现多行追加

i [\]text 在行前面插入文本

c [\]text 替换行为单行或多行文本

w /path/somefile 保存模式匹配的行至指定文件

r /path/somefile 读取指定文件的文本至模式空间中匹配到的行后

= 为模式空间中的行打印行号

! 模式空间中匹配行取反处理

s///:查找替换,支持使用其它分隔符,s@@@,s###

替换标记:

g 行内全局替换

p 显示替换成功的行

w /PATH/TO/SOMEFILE 将替换成功的行保存至文件中

(1)p模式操作

catfstab -n | sed5p##编辑第五行,并在屏幕中显示

catfstab -n | sed -n4p ##只显示第五行

catfstab -n | sed -n3,6p##显示3-5行内容

catfstab -n | sed -n '3p;6p' ##显示第三行和第五行

sed-n'/#/p'fstab##显示#所在行

sed -n'/#/!p'fstab##显示不带#的行

sed -n'/\:/p'fstab##显示含:的行

sed -n'^UUID/p'fstab##显示以UUID开头的行

sed -n'/^$/!p'fstab##不显示空白行

sed -n'/^$/!p'fstab | sed -n'/^#/!p'##不显示空白行和#所在行

(2)d模式操作

sed'/^UUID/d'fstab##删除UUID所在行

sed'/^UUID/!d'fstab##出UUID行,其他都删除

sed'/^#/d'fstab##删除所有含#的行

sed'/^$/d'fstab##删除空格行

cat -n fstab | sed'5d'##删除第五行

cat -n fstab | sed'2d;5d'##删除第二行和第五行

cat -n fstab | sed'2,5d'##删除2-5行

(3)a模式操作

sed'/^UUID/ahello'fstab##在UUID下一行添加

sed'/^UUID/ahello\nvan'fstab##在UUID下一行添加两行

sed'4ahello\nvan'fstab##在第四行的下一行添加

sed'4ihello\nvan'fstab##在第四行插入

(4)c模式操作

sed'/#/chello'fstab##将所有含#的行改为hello

sed'/^#/cwestos'-i fstab##将所有含#的行给为westo并保存修改

练习:编写一个脚本,用来改写apache配置文件中的端口号

(5)w模式操作

sed'/^UUID/w file'fstab##将UUID所在行,导入file文件,该文件可以不存在

(6).sed的其他用法

6.1统计文件行数

sed -n '/^UUID/=' fstab      ##统计文件的行数

sed '/^UUID/=' fstab         ##将行数放到UUID所处位置

sed -n '$=' fstab            ##统计行数

wc -l fstab | cut -d " " -f 1

6.2插入内容

sed '6r /opt/insert' fstab                      ##将/mnt/file文件的内容放到fstab文件的第六行后

sed '$r /opt/insert' fstab                      ##将/mnt/file文件的内容放到fstab文件的最后

sed '$r /opt/insert' fstab -i fstab          ##保存对该文件的修改,该文件必须存在,不存在则不能使用该命令

sed '$r/opt/insert' fstab > test             ##    保存修改到test文件中

6.3处理规则设定

sed -f rule fstab 根据文件中的规则对文件进行处理

vim rule

/^UUID/p

/UUID/=

6.4替换文件内容

sed 's/sbin/#########/g' passwd        ##将文件所有sbin替换成########

sed '1,5s/sbin/#########/g' passwd    ##将文件前五行中的sbin替换成########

sed '/adm/,/halt/s/sbin/********/g' passwd    ##将adm到halt行中的sbin替换成*******

sed 's/\///g' passwd            ##将passwd文件中的所有/删除

6.5 @与/等同

sed 's@/@#####@g' passwd        ##将passwd文件中的所有/替换成#####,其中@也是/

sed 's@sbin@####@g;s/nologin/*******/g' passwd

sed -e 's@sbin@####@g' -e 's/nologin/!!!!!/g' passwd

 6.6其他命令

sed'G'fstab##在每一行后面添加一个空白行

sed'$!G'fstab

sed'='fstab##在每一行前添加行号

sed'='fstab | sed'N;s/\n//'##进行预处理

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容