Shell入门07 -- 正则表达式,grep,sed,awk命令

Shell正则

  • 正则表达式是为处理大量的字符串而定义的一套规则和方法,通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤,替换或输出需要的字符串;
  • 最常 应用正则表达式 的命令有grepsedawk
基础的正则表达式
  • ^word:匹配以word开头的内容;
  • word$:匹配以word结尾的内容;
  • ^$:表示空行;
  • . :表示且只能代表任意一个字符;
  • \:转义字符即让字符原有的含义失效;
  • *
  • .*:匹配所有字符;
  • [abc]:匹配含有abc的任意字符;
  • [^abc]:匹配不含邮abc的任意字符;
  • [a-z]:匹配包含小写字母;
  • [A-Z]:匹配包含大写字母;
  • [a-Z]:匹配包含所有字母;
  • (www|888):匹配包含字符串www或888的字符;
  • (a+):匹配字符a出现一次或多次的字符;
  • ab(c|d):匹配包含字符串abc或abd的字符;
  • [[:digit:]]:匹配包含数字的字符;
  • [[:lower:]]:匹配包含小写字母的字符;
  • [[:upper:]]:匹配包含大写字母的字符;
  • [[:alpha:]]:匹配包含所有字
    母的字符;

grep

  • 下面创建一个文本文件test.txt,使用grep命令来测试上面的正则表达式,文本内容如下:
I am liyanyan teacher!!
I teach Linux.
test

I like basketball sdasdasdfgd!
my jianshu is sdasdsfds.com
our site is fdsfgdsfd.com
my qq is 114335fdsfsda.
note 34710233454.
grep参数选项
  • grep -o:只打印出匹配到的字符;
  • grep -E:支持扩展元字符,即转义字符;
  • grep --color=auto 'root' /etc/passwd: --color=auto匹配的目标文本有颜色显示;
  • 利用别名alias可以将grep --color=auto配置到系统的配置文件/etc/bashrc中去,这样就不用每次都输入了,找到/etc/bashrc文件然后利用sublime打开,在最后输入alias grep='grep --color=auto',保存需要输入密码,获取修改此系统文件的权限,如下所示:
    image.png
  • 终端再来执行grep 'root' /etc/passwd,结果如下:
    image.png
  • grep -n 'root' /etc/passwd:打印行 包含root,有行号,默认区分大小写,-n表示打印行号;
  • grep -n -i 'root' /etc/passwd:打印行 包含root,有行号,不区分大小写,-i表示不区分大小写;
  • grep -n -i '^root' passwd: 打印行 包含root,有行号,以root开头;
  • grep -n -i -v '^root' passwd:打印行 包含root,有行号,不区分大小写,不以root开头,-v表示取反;
  • grep -n -B 3 '^_svn' /etc/passwd:打印行 有行号,以_svn开头的前面3行,-B 3表示目标行的前面三行;
    image.png
  • grep -n -A 3 '^_svn' /etc/passwd:打印行 有行号,以_svn开头的后面3行,-A 3表示目标行的后面三行;
    image.png
  • grep -n -C 3 '^_svn' /etc/passwd:打印行 有行号,以_svn开头的前面三行与后面3行,-C 3表示目标行的前面3行与后面3行;
    image.png
  • grep -w 'macOS' /etc/passwd:打印行 包含macOS字符,-w表示按照指定字符搜索;
grep+正则表达式
  • grep "^m" test.txt:过滤以m开头的行,会将过滤行打印出来,如下所示:
    image.png
  • grep "m$" test.txt:过滤以m结尾的行,会将过滤行打印出来,如下所示:
    image.png
  • grep -vn "^$" test.txt:将空行排除掉,然后打印出其他内容,且打印出行号,如下所示:
    image.png
  • grep "." test.txt:匹配任意字符,不包括空行,如下所示:
    image.png
  • grep ".*" test.txt:匹配任意字符,包括空行,如下所示:
    image.png
  • grep "\.$" test.txt:匹配以点结尾的所有行,如下所示:
    image.png
  • grep "[abc]" test.txt:匹配包含abc的所有行,如下所示:
    image.png
  • grep "[0-9]" test.txt:匹配包含0-9的所有行,如下所示:
    image.png
  • grep "[a-z]" test.txt:匹配包含所有小写字母;
  • grep "[A-Z]" test.txt:匹配包含所有大写字母;
  • grep "[^a-z]" test.txt:匹配去除小写字母的其他所有字符;
  • grep "^[a-z]" test.txt:匹配以小写字母开头的内容;
  • grep "3\{2\}" test.txt:匹配字符3 重复出现2次;
  • grep -E "3{2}" test.txt:匹配字符3 重复出现2次,有参数E,无需转义字符;
  • grep -E "3{1,3}" test.txt:匹配字符3 重复出现1-3次;
  • grep -E "3{1,}" test.txt:匹配字符3,重复出现1次或1次以上;
  • grep -E "(com)" test.txt:匹配字符串com的字符,如下:
    image.png
  • grep -E "(a+)" test.txt:匹配字符a,出现一次或者多次的字符,如下所示:
    image.png
  • grep "[[:digit:]]" test.txt:匹配包含数字的字符,如下:
    image.png

sed

  • sed是一个流编辑器,非交互的编辑器,它一次处理一行内容;处理时将当前处理的行存储在临时缓冲区中,也称为模式空间,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区中的内容送往屏幕,接着处理下一行,这样不断重复,直到文件末尾,文件内容并没有改变,除非你使用重定向存储输出;
  • sed主要用来自动编辑一个或者多个文件,简化对文件的反复操作,编写转换程序等;
sed命令
  • sed [options] 'command' file
  • sed与grep不一样,不管是否找到指定的模式,退出状态都是0,只有当命令存在语法错误时,sed的退出状态才是非0;
  • a:在当前行添加一行或多行;
  • c:用新文本修改(替换)当前行中的文本;
  • d:删除行;
  • i:在当前行之前插入文本;
  • l:列出非打印字符;
  • p:打印匹配到的内容;
  • n:读入下一输入行,并从下一条命令而不是第一条命令开始对其处理;
  • !:对所选行以外的所有行应用命令;
sed参数选项
  • sed -n:取消默认的输出;
  • sed -i:直接修改对应的文件;
  • sed -r:支持扩展元字符,即转义字符;
应用
  • sed -n 'halt/p' test.txt:打印匹配halt的行;
  • sed -n '2p' test.txt:打印第二行;
  • sed -n '$p' test.txt:打印最后一行;

awk

  • awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母;
  • awk适合文本处理和报表生成,其语法较为常见,借鉴了某些语言的一些精华,如 C 语言等。在 linux 系统日常处理工作中,发挥很重要的作用,掌握了 awk将会使你的工作变的高大上;
  • 通常,awk是以文件的每一行 为处理单位的;awk每接收文件的一行,然后执行相应的命令,来处理文本;
awk参数
  • awk -F":" '{ print $1 }' hello.txt:-F参数用来指定分隔符 :
awk命令
  • awk -F":" '{ print $1 }' hello.txt:其中print为打印命令,读取hello.txt文件中的内容,遍历每一行以分隔符:隔开,然后打印每一行的第一个分隔字符串;
awk的内置命令
  • NF:每一行经过分隔符切割之后获取的 字段的个数;
  • NR:文件的行数;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容