sed与awk
sed
格式
sed 选项 控制命令 文件或标准输入
sed 流程: (循环打印)
sed是将文件里的每一行读入模式空间进行操作,

sed选项
-r 支持正则表达
-n 取消默认打印 清空当前模式空间,读入下一行
-i 同步到文件里的内容 并生成备份文件
-e 执行多条命令
-f 引用sed脚本
|bash 将输出的结果交给bash执行
例:
sed -n '9s#.*#echo hehe#'p passwd |bash
hehe
将passwd文件的第9行全部内容替换为echo hehe并交给bash执行
sed命令
| sed命令 | 作用 |
| a | 追加,在行后追加 |
| i | 插入,在行前插入 |
| d | 删除 |
| c | 替换,很少使用,按行替换 |
| s | 替换指定的字符串,后面跟g,g为s命令的全局替换标志 |
| p | 输出指定的行,加-n取消默认打印 |
| w | 另存文件 sed 'w 另存文件名' 文件名 |
| = | 显示行号 '1=' 显示1行行号,'1,3='显示1-3行号 |
| l | 显示文件内看不到的字符串,如$结束符 |
| y | 转换字符 |
| q | 退出sed |
| r | 读取指定文件到行后 |
| n | 杜如下一行内容 |
sed指定文件内容的执行范围
sed '10' 命令 #匹配第10行
'10,20' #匹配10到20行
'10,+20' #匹配10到30行
'1~2' #从第一行开始以2为间隔,匹配结果为奇数行 1,3,5,7,9
'2~2' #从第二行开始以2为间隔.匹配结果为偶数行 2,4,6,8,10
'10,$' #从第10行到最后一行
'/内容/' #匹配到所有指定内容的行
'/内容1/,/内容2/' #匹配从内容1到内容2的所有的行
'/内容,$/' #匹配到内容到结尾的所有的行
'10,/内容/' #从第10行到匹配到内容的行
'/内容/,10' #从匹配到内容的行到底10行
'/内容/,+20' #从匹配到的内容的行开始之后的20行
sed换行 \r teb \t 空格 \n
sed增删改查
增
-a在行后增加
[root@wk ~]# sed '1,3a hehe' passwd #在1到3行的行后增加hehe
root:x:::root:/root:/bin/bash
hehe
bin:x:::bin:/bin:/sbin/nologin
hehe
daemon:x:::daemon:/sbin:/sbin/nologin
hehe
-i在行前增加
sed '/root/i hehe' passwd #在内容为root的行前增加
hehe
root:x:::root:/root:/bin/bash
hehe
operator:x:::operator:/root:/sbin/nologin
删
sed 'd' 文件 #删除文件的所有内容
sed '1,10d' passwd #删除passwd文件1到10行内容
改
c替换只能替换正行
sed '1,20c hehe' passwd #将从1到20行的内容全部替换为hehe (1-20全部内容只替换为1个hehe)
hehe
jenkins:x:::Jenkins Automation Server:/var/lib/jenkins:/bin/false
s 替换匹配到的字符 s# # #
sed -n 's#root#123#p' passwd #将root替换为123 p打印出来
:x:::root:/root:/bin/bash
operator:x:::operator:/:/sbin/nologin
sed -i 's#root#123#g' passwd
#将文件passwd内的所有root替换为123 g全局替换,不加g只替换每行匹配到的第一个root 也可以把g写成数字指定替换每行的几个
s的反向引用
[root@wk ~]# cat
aaa bbb ccc ddd eee [root@wk ~]# sed -nr 's#a.* (.*) (.*) .*e#\1 \2#p'
ccc ddd
s###里的一个() 对应一个\1
s#()()()()#\1 \2 \3 \4#
\1 可以取出 对应第1个括号里的内容 以此类推
&符号
[root@wk ~]# sed -rn 's#a.* (.*) (.*) .*e#所有&内容#p'
所有aaa bbb ccc ddd eee内容
&代表s#-## 匹配到的所有内容
查
[root@wk ~]# sed -n ,3p passwd #查看1到3行
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
sed显示行号打印出来
[root@wk ~]# sed -n '2,4{=;p}' passwd |xargs -n2
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
-n 不打印默认输出 2-4行 先=显示行号.在p打印内容{用大括号一起执行},最后交给xargs -n2 指定2个字段为一行 打印出来
AWK
基本操作
-F 指定 分隔符
[root@wk ~]# cat
aa:bb,cc dd
-F指定以冒号逗号和空格为分隔符打印4个字段
[root@wk ~]# awk -F "[,: ]" '{print $1"\n"$2"\n"$3"\n"$4}'
aa
bb
cc
dd
print 打印
[root@wk ~]# awk "{print}"
aa:bb,cc dd
NF 多少字段
[root@wk ~]# awk -F":" '{print NF}' passwd
[root@wk ~]# awk -F":" '{print $NF}' passwd
/bin/bash
irgs
/sbin/nologin
/sbin/nologin
NR 多少行
[root@wk ~]# awk '{print NR,$0 }' passwd #打印行号和内容
root:x:::root:/root:/bin/bash
irgs
n catn:x:::bin:/bin:/sbin/nologin
[root@wk ~]# awk 'NR>3 && NR<6''{print NR,$0}' passwd #打印第4行到第5行 行号和内容
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
awk循环数组
[root@wk ~]# cat
www.baidu.com
www..com
www..com
www.baidu.com
www.baidu.com
www..com
www..com
www.huawei.com
www.baidu.com
www.baidu.com
www..com
www.baidu.com
www..com
www..com
www..com
www.baidu.com
www..com
www.huawei.com
www.hehe.com
www.hehe.com
[root@wk ~]# awk -F"." '{s[$2]=s[$2]+1}END{for(k in s) print s[k],k}'
huawei
hehe
baidu
s[$2]没有定义值所以s[$2]=0,因此s[$2]=s[$2]+1当$2出现1次对应的 s[$2] 做一次+1
k in s 把 k赋值s
k=域名 =$2 后来的覆盖新的
s[k] = s[$3]+1
[root@wk ~]# cat 将第二列数值相加
[root@wk ~]# cat [root@wk ~]# awk 'BEGIN{s=0}{s+=$2}END{print s}'
sed与awk的更多相关文章
- Sed、Awk单行脚本快速参考
文本间隔: # 在每一行后面增加一空行 sed G awk '{printf("%s\n\n",$0)}' # 将原来的所有空行删除并在每一行后面增加一空行. # 这样在输出的文本 ...
- sh脚本学习之: sh脚本 、sed、awk
sh脚本 sh命令的批处理文件,支持更复杂的逻辑. Shell中的变量 参数 $0 当前脚本路径 $1....$n 脚本执行对应的第n个参数 条件判断 文件判断 test [op] path e存在 ...
- 一个利用sed和awk处理文本的小栗子
这两天做<Linux操作系统>课程的作业,碰到了一个题目,感觉很有意思,很考验对awk掌握的熟练度,故特意拿来分享. 首先说题目是这样的,有这样一段文本: RECORD #这是多余的注释行 ...
- Pyp 替代sed,awk的文本处理工具
Linux上文本处理工具虽不少,像cut,tr,join,split,paste,sort,uniq,sed,awk这些经典工具让人眼花缭乱,而且都太老了,使用方法都不太人性化,尤其awk,语法简直反 ...
- sed and awk学习笔记
sed and awk 背景 awk起源追溯至sed和grep,进而追溯至共同的行编辑器ed.实用工具grep来源于ed命令:g/re/p .实用工具awk和sed有一个共同的选项-f用于指定脚本的名 ...
- 三大文本处理工具grep、sed及awk的简单介绍
grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ...
- 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式
正则表达式_百度百科 http://baike.baidu.com/link?url=ybgDrN2WQQKN64_gu-diCqdeDqL8LQ-jiQ-ftzzPaNUa9CmgBRDNnyx50 ...
- sed和awk最佳入门教程
文档<sed和awk最佳入门教程>——摘自<实战linux shell编程与服务器管理>,简单易懂,适合初学者. 下载地址:http://download.csdn.net/d ...
- grep、sed、awk、perl、js、vim等对正则表达式的支持的差别
grep.sed.awk.perl等对正则表达式的支持的差别 grep 2.5.1 egrep 2.5.1 sed 3.02 sed 4.07 awk 3.1.1 perl 5.8.0 vim 6.1 ...
- 正则、grep、sed、awk
每次用到正则都要蛋疼一下,索性总结一下在这里. 正则 正則表達式主要分为基础正则和扩展正则.注意,正则和一般命令行输入的命令的通配符不同.正则仅仅使用于支持这样的表示法的工具,如:vi,grep,se ...
随机推荐
- git 常用命令操作
目录 一.用户和邮箱 用户和邮箱的作用 查看用户名和邮箱地址 修改用户名和邮箱地址 用户名和邮箱地址的作用 用户名和邮箱地址是本地git客户端的一个变量,不随git库而改变. 每次commit都会用用 ...
- go爬虫之爬取豆瓣电影
go爬取豆瓣电影 好久没使用go语言做个项目了,上午闲来无事花了点时间使用golang来爬取豆瓣top电影,这里我没有用colly框架而是自己设计简单流程.mark一下 思路 定义两个channel, ...
- 工作中常用的Git操作
粘贴自:微信公众号:程序员共成长 分支操作: git branch 创建分支 git branch -b 创建并切换到新建的分支上 git checkout 切换分支 git branch 查看分支列 ...
- Ubuntu系统---EasyECD安装记录
说明:因解决Ubuntu花屏和频繁死机的问题(后来证实本人的电脑显卡驱动有问题),手残毁坏了系统,需重装.之前从未装过系统,经过三天,反复折腾装了近十次的系统,现总结如下. 第一步:Windows 系 ...
- Python单例模式(Singleton)的N种实现
很多初学者喜欢用全局变量,因为这比函数的参数传来传去更容易让人理解.确实在很多场景下用全局变量很方便.不过如果代码规模增大,并且有多个文件的时候,全局变量就会变得比较混乱.你可能不知道在哪个文件中定义 ...
- 嵌入式系统FreeRTOS — 互斥信号量
互斥信号量可以在资源保护的时候很有帮助.用于控制在两个或多个任务间访问共享资源.任务1里面用互斥,那么任务2只能等任务1访问完再访问同一个变量. 比如全局变量double gADC_value[CH_ ...
- python中的pyc和pyo文件和__pyc__文件夹
一.命令生成 pyc 文件 *.py:源码文件,由 Python 程序解释. *.pyc:源码经编译后生成的二进制字节码(Bytecode)文件. *.pyo:优化编译后的程序,也是二进制字节码文件. ...
- API接口防止参数篡改和重放攻击
{近期领导要求我对公司业务的支付类的ocr接口做研究,是否存在支付接口重放攻击,so.....} API重放攻击(Replay Attacks)又称重播攻击.回放攻击.他的原理就是把之前窃听到的数据原 ...
- 压测工具ab的简单使用
apache benchmark(ab)是一种常见的压测工具,不仅可以对apache进行压测,也可以对nginx,tomcat,IIS等进行压测 安装 如果安装了apache,那么ab已经自带了,不需 ...
- 装饰者模式(Decorator)---结构型
1 基础知识 定义:在不改变原有对象的基础上,将功能附加到对象上即动态地给一个对象添加一些额外的职责.特征:提供了比继承更有弹性的替代方案. 本质:动态组合. 使用场景:扩展一个类的功能或给一个类添加 ...