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的更多相关文章

  1. Sed、Awk单行脚本快速参考

    文本间隔: # 在每一行后面增加一空行 sed G awk '{printf("%s\n\n",$0)}' # 将原来的所有空行删除并在每一行后面增加一空行. # 这样在输出的文本 ...

  2. sh脚本学习之: sh脚本 、sed、awk

    sh脚本 sh命令的批处理文件,支持更复杂的逻辑. Shell中的变量 参数 $0 当前脚本路径 $1....$n 脚本执行对应的第n个参数 条件判断 文件判断 test [op] path e存在 ...

  3. 一个利用sed和awk处理文本的小栗子

    这两天做<Linux操作系统>课程的作业,碰到了一个题目,感觉很有意思,很考验对awk掌握的熟练度,故特意拿来分享. 首先说题目是这样的,有这样一段文本: RECORD #这是多余的注释行 ...

  4. Pyp 替代sed,awk的文本处理工具

    Linux上文本处理工具虽不少,像cut,tr,join,split,paste,sort,uniq,sed,awk这些经典工具让人眼花缭乱,而且都太老了,使用方法都不太人性化,尤其awk,语法简直反 ...

  5. sed and awk学习笔记

    sed and awk 背景 awk起源追溯至sed和grep,进而追溯至共同的行编辑器ed.实用工具grep来源于ed命令:g/re/p .实用工具awk和sed有一个共同的选项-f用于指定脚本的名 ...

  6. 三大文本处理工具grep、sed及awk的简单介绍

    grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ...

  7. 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式

    正则表达式_百度百科 http://baike.baidu.com/link?url=ybgDrN2WQQKN64_gu-diCqdeDqL8LQ-jiQ-ftzzPaNUa9CmgBRDNnyx50 ...

  8. sed和awk最佳入门教程

    文档<sed和awk最佳入门教程>——摘自<实战linux shell编程与服务器管理>,简单易懂,适合初学者. 下载地址:http://download.csdn.net/d ...

  9. 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 ...

  10. 正则、grep、sed、awk

    每次用到正则都要蛋疼一下,索性总结一下在这里. 正则 正則表達式主要分为基础正则和扩展正则.注意,正则和一般命令行输入的命令的通配符不同.正则仅仅使用于支持这样的表示法的工具,如:vi,grep,se ...

随机推荐

  1. PHP扩展模块php_igbinary和php_redis的安装

    php_igbinary : 在序列化和反序列化的效率上高于其自带的 php_redis      :效率是相当高有链表排序功能   详情略 安装之前要准备 百度网盘: wampserver2.5-A ...

  2. 多线程--volatile

    在解释volatile关键字之前,先说说java的指令重排以及代码的执行顺序. 指令重排: public void sum(){ int x = 1; int y = 2; int x = x + 1 ...

  3. SiteOmat

    卡巴斯基实验室高级安全研究员Ido Naor和以色列安全研究员Amihai Neiderman在卡巴斯位于墨西哥坎昆举行的安全分析师峰会期间,就加油站的安全问题展开了全面分析.他们的研究表明,攻击者可 ...

  4. 《设计模式之美》 <03>面向对象、设计原则、设计模式、编程规范、重构,这五者有何关系?

    面向对象 现在,主流的编程范式或者是编程风格有三种,它们分别是面向过程.面向对象和函数式编程.面向对象这种编程风格又是这其中最主流的.现在比较流行的编程语言大部分都是面向对象编程语言.大部分项目也都是 ...

  5. EasyUI+JSP之java读取数据库后JSON格式数据的返回及调用

    做作业工程中遇到一些问题,特此记录一下 解决的问题:使用EasyUI框架搭建简单学生管理系统(数据库增删改查)操作时配合JSP,不知道如何把从数据库获得的数据封装成JSON格式并传回前端JSP并进行展 ...

  6. ARM体系结构与编程读书笔记——处理器的运行模式

    ARM处理器共有7种运行模式,如下表: 处理器模式 描述 用户模式(User, usr) 正常程序执行的模式 快速中断模式(FIQ, fiq) 用于高速数据传输和通道处理 外部中断模式(IRQ, ir ...

  7. C#中设置double类型数据的小数长度

    如果double A=1.5321654:需要将其转换为3位小数,字符串的话A.tostring(".###")就可以,输出的是1.532: 也可以用A.ToString(&quo ...

  8. Spring-简介-IOC理论推导

    1.Spring 1.1.简介 Spring:春天----->给软件行业带来了春天! 2002,首次推出了Spring框架的雏形:interface21框架! Spring框架即以interfa ...

  9. debug:The key "" is not recognized and ignored.

    今天写代码时候发现chrome浏览器有一个警告The key "" is not recognized and ignored.既然发现了就处理一下吧,于是就有了这篇小文章. 查阅 ...

  10. [Python自学] day-18 (1) (JS正则、第三方组件)

    一.JS的正则表达式 JS正则提供了两个方法: test():用于判断字符串是否符合规定: exec():获取匹配的数据: 1.test() 定义一个正则表达式: reg = /\d+/; // 用于 ...