Linux中的sed命令
sed - stream editor for filtering and transforming text
流编辑器的过滤和转换文本
sed [-nerf] [动作]
参数:
-i 修改源文件 危险
-e 直接在命令行模式上执行sed的动作编辑
-f 直接将sed的动作写在一个文件内,-f filename 则可以执行filename内的sed动作
-r :使用扩展的正则表达式
使用扩展的正则表达式需要“//”正斜线
[root@lamp scripts]# cat sed11.txt [root@lamp scripts]# sed -nr '/2|3/p' sed11.txt //打印包含2或3的行 [root@lamp scripts]# sed -nr '/2|3$/p' sed11.txt //打印以2或3结尾的行,但是打印的是以包含2和以3结尾的行 [root@lamp scripts]# sed -nr '/(2|3)$/p' sed11.txt //这个才是正确的以2或3结尾的行 [root@lamp scripts]#
-n 静默模式,默认的sed中所有来自stdin的数据一般都会被列出到屏幕上,但如果加上-n之后,则只有经过sed特殊处理的那一行才会被列出来。
[root@mysql tmp]# sed "/^a/p" sed.txt //将以”a“开头的行打印出来,可以看到b也被打印出来了,并且a被打印了两遍,一遍是sed默认就是将模式空间中的内容打印出来,第二遍是p参数又打印了一遍 a a b [root@mysql tmp]# sed -n "/^a/p" sed.txt //使用-n参数,只讲匹配到的内容打印出来 a [root@mysql tmp]#
"n"和“i”不能同时使用
[root@lamp scripts]# sed -ni "s#Port 22#Port 52113#p" /tmp/sshd_config [root@lamp scripts]# cat /tmp/sshd_config //啥都没有了,经测试只有“-ni”会发生这种情况,“-in”则不会 #Port [root@lamp scripts]#
动作说明:[n1,n2] function
1.LineNumber
精确匹配的行
2.StarLine, +N
从startline开始,到之后的n行结束,一共是n+1行
3.StartlLine~n
从指定行开始指定步长
[root@lamp scripts]# cat sed.txt. one two three four five [root@lamp scripts]# sed -n '1~2p' sed.txt. //从第一行开始只有1,3,5行被打印出来 one three five [root@lamp scripts]#
4.StartLine,EndLine
$ 表示最后一行
[root@mysql tmp]# sed -n "1,2p" /etc/passwd //打印1-2行的内容 root:x:::root:/root:/bin/bash bin:x:::bin:/bin:/sbin/nologin [root@mysql tmp]# sed -n "30,\$p" /etc/passwd //答应30到最后一行的内容 mysql:x::::/home/mysql:/sbin/nologin apache:x:::Apache:/var/www:/sbin/nologin [root@mysql tmp]# sed -n "30p" /etc/passwd //打印第30行的内容 mysql:x::::/home/mysql:/sbin/nologin
5./匹配模式/ 支持正则表达式
如:/^root/
6./partern/,/partern/
第一次被partern1匹配到的行开始,至第一次被partern2匹配到的行结束, 这中间的所有行
[root@mysql tmp]# sed -n "/bash$/p" /etc/passwd //打印以bash结尾的行 root:x:::root:/root:/bin/bash along:x::::/home/along:/bin/bash [root@mysql tmp]# sed -n "/^rpc/p" /etc/passwd //打印以rpc开头的行 rpc:x:::Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin rpcuser:x:::RPC Service User:/var/lib/nfs:/sbin/nologin [root@mysql tmp]# sed -n "/^\(.*\)root/p" /etc/passwd //打印以任意字符开头,中间有root的行 root:x:::root:/root:/bin/bash operator:x:::operator:/root:/sbin/nologin [root@mysql tmp]#
function
= 打印行号
[root@lamp scripts]# sed -n '1~2=' sed.txt. //打印1 3 5行号
[root@lamp scripts]# sed -n '1~2=;p' sed.txt. //不仅打印行号,内容也打印,但是结果显示是将所有的内容都打印了,因为“p”操作前边什么都没有指定,默认就是将所有的打印
one
two
three
four
five
[root@lamp scripts]# sed -n '1~2{=;p}' sed.txt. //针对同一内容的不同操作应该使用“{}”括起来,并且不同的操作之间应该使用分号隔开
one
three
five
[root@lamp scripts]#
d:删除符合条件的行
p:打印符合条件的行
使用此命令的话,指定的内容会打印两次,这是因为sed命令默认的就是 将模式空间中的内容打印出来,而p也是打印的意思,所以会重复打印
a \string : 在指定的行后面追加新的行,内容是string
a的意思append追加的意思,即在指定行的后边追加内容
[root@mysql tmp]# cat sed.txt a b [root@mysql tmp]# a="c" //设置一个变量a [root@mysql tmp]# sed "2a $a" sed.txt //在第二行后边追加变量a的值 a b c [root@mysql tmp]# sed "2a \$a" sed.txt //特殊符号需要转义 a b $a [root@mysql tmp]#
i \string: 在指定的行前面添加新的行,内容是string
”i“就是insert的意思
[root@mysql tmp]# cat sed.txt a b [root@mysql tmp]# sed '1i 1' sed.txt //在指定行的前边添加一行 a b [root@mysql tmp]#
r File:将指定文件的内容添加至符合条件的行处
[root@mysql tmp]# cat sed.txt a d [root@mysql tmp]# cat sed1.txt b c [root@mysql tmp]# sed "2r ./sed1.txt" sed.txt //将sed1.txt的内容在sed.txt的第二行开始添加 a d b c [root@mysql tmp]#
w File:将指定范围的内容添加至指定的文件中去
[root@mysql tmp]# sed -n "30,\$w ./a.txt" /etc/passwd //将passwd文件的最后两行写入到a.txt文件中去 [root@mysql tmp]# cat a.txt mysql:x::::/home/mysql:/sbin/nologin apache:x:::Apache:/var/www:/sbin/nologin [root@mysql tmp]#
s /partern1/partern2/修饰符 查找替换 默认只替换第一次被匹配到的字符串
不仅可使用s ///也可以使用s ### ,s @@@等,s 命令也可以支持后向引用
将garnett替换成kobe,html替换成HTML [root@lamp ~]# echo garnett-linux.html|sed "s#garnett\(.*\)html#kobe\1HTML#g" kobe-linux.HTML [root@lamp ~]#
修饰符:
g:全局替换
[root@lamp scripts]# head /etc/passwd|sed "s#[a-z]##" //发现只是将每一行的第一个字母替换成空 ,因为”s“默认只替换第一次被匹配到的字符串 oot:x:::root:/root:/bin/bash, ::bin:/bin:/sbin/nologin aemon:x:::daemon:/sbin:/sbin/nologin dm:x:::adm:/var/adm:/sbin/nologin p:x:::lp:/var/spool/lpd:/sbin/nologin ync:x:::sync:/sbin:/bin/sync hutdown:x:::shutdown:/sbin:/sbin/shutdown alt:x:::halt:/sbin:/sbin/halt ail:x:::mail:/var/spool/mail:/sbin/nologin ucp:x:::uucp:/var/spool/uucp:/sbin/nologin [root@lamp scripts]# head /etc/passwd|sed "s#[a-z]##g" //加上"g"参数即可,可以重复替换 :::::/:// :::::/:// :::::/:// ::::://:// :::::///:// :::::/:// :::::/:// :::::/:// :::::///:// :::::///:// [root@lamp scripts]#
i:忽略大小写
实战:
使用sed命令取ip地址
[root@lamp scripts]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr :0C:::CD:
inet addr:192.168.220.129 Bcast:192.168.220.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe17:cd98/ Scope:Link
UP BROADCAST RUNNING MULTICAST MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: ( (208.2 KiB)
[root@lamp scripts]# ifconfig eth0|sed -nr "s#^(.*)ddr:(.*) Bc(.*)#\2#gp"
192.168.220.129
[root@lamp scripts]# ifconfig eth0|sed -nr "s#^(.*)ddr:(.*) Bcast:(.*) (.*)#\2#gp"
192.168.220.129
[root@lamp scripts]# ifconfig eth0|sed -nr "s#^(.*)ddr:(.*) Bcast:(.*) (.*)#\2\3#gp"
[root@lamp scripts]# ifconfig eth0|sed -nr "s#^(.*)ddr:(.*) Bcast:(.*) (.*)#\2 \3#gp"
192.168.220.129 192.168.220.255
[root@lamp scripts]# ifconfig eth0|sed -nr "s#^(.*)ddr:(.*) Bcast:(.*) (.*)#\2\t\3#gp"
192.168.220.129 192.168.220.255
[root@lamp scripts]#
[root@lamp scripts]# ifconfig eth0|sed -nr "s#^(.*)ddr:(.*) Bcast:(.*) (.*)#ping \2#gp"
ping 192.168.220.129
[root@lamp scripts]# ifconfig eth0|sed -nr "s#^(.*)ddr:(.*) Bcast:(.*) (.*)#ping \2#gp"|bash
PING () bytes of data.
bytes from ttl= time=0.032 ms
bytes from ttl= time=0.033 ms
bytes from ttl= time=0.045 ms
bytes from ttl= time=0.040 ms
^C
--- 192.168.220.129 ping statistics ---
packets transmitted, received, % packet loss, time 8225ms
rtt min/avg/max/mdev = 0.022/0.038/0.049/0.008 ms
[root@lamp scripts]#
Linux中的sed命令的更多相关文章
- Linux中使用sed命令或awk命令修改常规配置文件
一.方案: Linux中使用sed命令或awk命令修改常规配置文件 二.步骤: 1.假设有一个a.txt,内容如下: #!/bin/bash aa= bbb= ccc= #ddd= 2.如果想要把里面 ...
- Linux中使用sed命令替换字符串小结
sed替换的基本语法为: sed 's/原字符串/替换字符串/' 单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线”\”进行转义,但是单引号”‘”是没有办法用反斜线”\”转义的 ...
- 【转】linux中的sed命令
转自:http://www.cnblogs.com/shineshqw/articles/1978122.html 功能说明: 利用script来处理文本文件. 语 法:sed [-hnV][-e&l ...
- Linux实战教学笔记12:linux三剑客之sed命令精讲
第十二节 linux三剑客之sed命令精讲 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件 ...
- linux三剑客之sed命令
一.前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件等等.如果我们相对这些文件进行一些编辑查询等操作时,我们可能会想到一些vi,vim,cat,more等命令.但是这些命令 ...
- day14 linux三剑客之sed命令
day14 linux三剑客之sed命令 sed命令 Sed 主要用来自动编辑一个或多个文件.简化对文件的反复操作.编写转换程序等. sed(流式编辑器) : sed主要用来修改文件. 1.sed命令 ...
- Linux中的历史命令
Linux中的历史命令一般保存在用户 /root/.bash_history history 选项 历史命令保存文件夹 选项 -c:清空历史命令 -w :把缓存中的历史命令写入历 ...
- 关于XShell的常见使用和设置以及Linux中的常见命令.
本文部分转自:http://sundful.iteye.com/blog/704079 和 http://www.vckai.com/p/5 有时候在XShell中操作的一些命令傻傻的分不清这个命令到 ...
- linux中的strings命令简介2
摘自:http://blog.csdn.net/stpeace/article/details/46641069 linux中的strings命令简介 之前我们聊过linux strings的用法和用 ...
随机推荐
- Robot Framework的安装
一.安装环境:Windows 64位操作系统64位2.7版本Python 二.简要步骤:1. 安装Python(RF是基于python 的,所以需要有python环境):2. 安装wxPython ( ...
- WebSockets介绍
Web sockets定义为在servers和clients之间的双向连接.意味着servers和clients可以同时交流并发送数据.这种协议是从底层就是双工连接.Web sockets技术上得到了 ...
- WC2015 k小割(k短路+暴力+搜索)
首先这道题不是非同一般的恶心,三个数据层次对应三个程序= = PROBLEM:http://uoj.ac/problems解法: 1~2直接暴力枚举边的选择与否+判断就行了 7~14可以发现是一个平面 ...
- 连载《一个程序猿的生命周期》-《发展篇》 - 7.是什么阻碍了"程序猿"的发展?
有两件事想记录一下,具有普遍性和代表性."程序猿"加了引号,是泛指一类人,也并非局限于IT行业. 山东子公司的总经理是公司大股东之一,个子不高.有些秃顶.面容显老,但看 ...
- Ceph部署(二)RGW搭建
背景 Ceph RGW简介 Ceph RGW基于librados,是为应用提供RESTful类型的对象存储接口.RGW提供两种类型的接口: 1) S3:兼容Amazon S3RESTful API: ...
- apk反编译方式
一.Apk反编译得到Java源代码 下载上述反编译工具包,打开apk2java目录下的dex2jar-0.0.9.9文件夹,内含apk反编译成java源码工具,以及源码查看工具. apk反编译工具de ...
- 关于CSS各种选择器,还有各种引入样式表的区别,import导入样式表,在介绍一些伪类选择器
(一)CSS选择器: 1.标签选择器:通过HTML的标签名直接选择该标签 2.类选择器:通过.选择器的名称{} 来对添加了class属性的标签进行选中 3.ID选择器:通过#选择器的名称{} 来对添加 ...
- gulp快速入门&初体验
前言 一句话先 gulp 是一个可以简单和自动化"管理"前端文件的构建工具 先说我以前的主要工作,我主要是做游戏服务端的,用c++/python,所以我对东西的概念理解难免要套到自 ...
- 把Eclipse项目转换成Maven项目
把Maven项目转换成Eclipse项目只要使用Maven的Eclipse插件就能做到 mvn eclipse:eclipse 其实Maven的Eclipse插件也有把Eclipse项目转换成Mave ...
- Junit使用教程
Junit是Java的单元测试工具,同时也是极限编程的好帮手.Junit4借助于Java5的Annotation(标注类)和静态导入的新特性,与Junit3有很大的区别,所以建议初学者直接使用Juni ...