Shell三剑客grep、awk、sed

https://blog.csdn.net/sj349781478/article/details/82930982

grep、awk、sed大概介绍

  • grep 基于正则表达式查找满足条件的内容
  • awk 报告生成器,格式化文本输出
  • sed 修改数据

grep

grep [OPTIONS] PATTERN [FILE...]

参数

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

/  请无视

 /  echo 12345 | grep 2
12345
 /  echo 12345 | grep -o 2
2
 /  echo 12341234 | grep -oE '.*?3'
123
4123

正则表达式

 /  echo hello world  hiiii| grep -oE "hello|hi"
hello
hi
  • [ ] 匹配在[ ] 中的任意一个字符
/  echo asd | grep -E "[a]"
asd
  • [^ ] 匹配内容不能有[ ] 中任意一个字符
 /  echo asd | grep -oE "[^a]"
s
d

正则表达式相关: https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference

awk

awk [options] 'program' file…

1、program:pattern{action statements;..}

  • pattern部分决定动作语句何时触发及触发事件
    BEGIN,END
  • action statements对数据进行处理,放在{}内指明
    print, printf

2、选项:

  • -F 指明输入时用到的字段分隔符
  • -v var=value 自定义变量

3、分割符、域和记录

  • awk执行时,由分隔符分隔的字段(域)标记1,1,2..n称为域标识,n称为域标识,0为所有域。
  • 省略action,则默认执行 print $0 的操作。
echo 7,8,9 | awk -F, '{print $2}'
8
8

4、变量
FS:输入字段分隔符(分割列);OFS:输出字段分隔符();RS:输入记录分隔符(分割行);ORS:输出记录分隔符;NF:字段数量;NR:记录号;
NFR:各文件分别计数,记录号。FILENAME:当前文件名;ARGC:命令行的参数;ARGV:数组,保存的是命令行所给定的各参数。

 **** ps | awk '{print $0}'
  PID TTY           TIME CMD
79791 ttys000    0:00.09 ssh 11***4@shell.***-***.com
44956 ttys001    0:00.06 /Applications/iTerm.app/Contents/MacOS/iTerm2 --server login -fp apple
44958 ttys001    0:10.59 -zsh

****ps | awk '{print $2}'
TTY
ttys000
ttys001
ttys001

- NF字段数
****  ps | awk '{print $NF}' #由前面可知一行有4列,所以这里等价于 $4
CMD
11***@shell.****-****.com
apple

****ps | awk 'NR>1{print $(NF-1)}'
ssh
-fp
  • FS 分割列
**** echo 2/3/4 | awk 'BEGIN{FS="/"}{print $1}'
2   #以 / 做分割
**** echo 2/3/4 | awk 'BEGIN{print $1}'
  #取不到,2/3/4被视为一个整体,没有分割
  • RS分割行
**** echo 2/3/4 | awk 'BEGIN{RS="/"}{print $0}'  #以 / 作为行的分割标志
2
3
4
  • ORS输出分隔符
[*****@izuefockpz ~]$ echo $PATH | awk 'BEGIN{RS=":"}{print $0}'
/usr/local/bin
/usr/bin
/usr/local/sbin
/usr/sbin

[****@izuefockpz ~]$ echo $PATH | awk 'BEGIN{RS=":"}{print $0}' | awk 'BEGIN{FS="\n";ORS=":"}{print $0}'
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin

4、awk控制语句

  • { statements;… } 组合语句
  • if(condition) {statements;…}
  • if(condition) {statements;…} else {statements;…}
  • while(conditon) {statments;…}
  • do {statements;…} while(condition)
  • for(expr1;expr2;expr3) {statements;…}

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###

**** echo hello world | sed 's#hello#AAAA#'
AAAA world

4、替换标记:
g 行内全局替换
p 显示替换成功的行
w /PATH/TO/SOMEFILE 将替换成功的行保存至文件中

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

推荐阅读更多精彩内容

  • sed与awk实例 文本间隔 在每一行后面增加一空行 将原来的所有空行删除并在每一行后面增加一空行。这样在输出的文...
    stuha阅读 1,897评论 0 21
  • grep grep的基本用法 grep命令是支持正则表达式的一个多用途文本搜索工具,一般格式为 grep 选项 模...
    王诗翔阅读 3,019评论 2 34
  • grep擅长查找,awk擅长分析(select),sed擅长批量编辑行 概述 SED的英文全称是 Stream E...
    piziyang12138阅读 935评论 0 3
  • 和小白终于见面了,也看了宝宝,很可爱,小白很幸福,他老公也会和宝宝玩。 小白,很有母性,很温柔。她会目光关注,宝宝...
    茶艾的小窝阅读 75评论 0 0
  • “前辈,告辞”洛笑抱拳道。随即转身大步离开。 “唉”秦逍遥叹了一口气,走上前去封住其余几名江湖人的内力,吩咐军士将...
    陈C奔波儿灞阅读 342评论 1 1