sed(Stream Editor)是Linux中文本处理使用非常广泛的工具,可以对文件内容进行替换、删除、新增、选取特定行等功能。下面通过sed常用实例介绍sed命令的使用方法。

sed基本语法

sed命令使用格式:sed [-nefir] ‘sed command’filename

选项说明:

-n:只打印模式匹配的行
-e:多重编辑操作时添加。
-r:支持扩展正则表达式
-i:直接修改原文件内容,原文件内容会发生变化。默认是不会对原文件内容修改。

选项实例说明:

(1)-n选项,只打印模式匹配的行,假设需求为打印第一行文件内容,包含和不包含-n选项的命令如下:

sed -n '1p' /etc/passwd #仅打印出第一行
sed '1p' /etc/passwd #不仅打印第一行内容,还显示整个/etc/passwd内容

说明:对比下输出结果就可以直观判断sed命令有无-n选项的区别了。

(2)-e选项。在多重编辑操作时添加,假设需求为同时打印包含root字符串或者oracle字符串的行。

sed -n -e '/root/p' -e '/oracle/p' /etc/passwd

(3)-r选项,支持扩展正则表达式。首先需要了解通配符与基础正则表达式、扩展正则表达式的关系与区别。假设需求同为打印包含root字符串或者oracle字符串的行。则带-r选项写法为:

sed -n -r '/(root|oracle)/p' /etc/passwd #打印包含root或oracle字符串的行

如果不带-r选项的写法,则为如下:

sed -n '/\(root\|oracle\)/p' /etc/passwd #打印包含root或oracle字符串的行

发现区别吗?-r选项可以支持扩展正则表达式,如果sed命令涉及使用扩展正则表达式,使用-r选项,可以简化命令编写,可以使sed命令更直观、简单。下面说说sed command命令的格式。

sed command命令格式可以理解为包含两部分内容:[定位文本内容方式][sed编辑命令]。简单的说,就是先定位要处理的行或者行区间行再执行相应处理,默认是处理文本中的每一行。定位文本内容通常为直接使用行号、正则表达式或者它们二者的混合使用。常见的定位行或行区间的方式如下:

(1)line 表示用数字指定行号,如打印文件第1行内容

sed -n '1p' /etc/passwd #打印第1行

(2)line1,line2 表示行号范围从line1到line2,如打印第2行到第5行的文件内容

sed -n '2,5p' /etc/passwd

(3)/pattern/ 查询包含指定模式的行。如打印行首为root字符串的行

sed -n '/^root/p' /etc/passwd

(4)/pattern/,line 获取匹配模式的行到指定行直接的文本内容。如打印行首匹配root字符串的行到第5行的文本内容

sed -n '/^root/,5p' /etc/passwd

(5)line,/pattern/  获取指定行号到首次匹配模式行之间的内容。如打印第3行到首次匹配root字符串之间的文本内容

sed -n '3,/root/p' /etc/passwd

(6)line1,line2 ! 获取不在指定行line1和line2区间的内容。如获取除了第3-5行之间的内容

sed -n '3,5 !p' /etc/passwd

在获取到匹配行之后,就可以执行sed编辑命令进行处理了。基本的sed编辑命令如下所示:

a\ 在匹配行下面添加文本
i\ 在匹配行上面插入文本。
c\ 用新文本替换选定的文本内容。
d 删除,删除选择的行。
s 替换指定字符
p 打印模板块的行。
= 打印当前行号码。

说明:上述仅列举最常用的sed编辑命令,通常能够满足绝大部分需求,如果想进一步了解,可以查阅sed命令相关手册。

sed命令使用基本实例

1、根据匹配模式或者指定行号查找文件指定内容

(1)通过行号打印指定内容

sed -n '1p' /etc/passwd #打印第1行
sed -n '3p' /etc/passwd #打印第3行
sed -n '$p' /etc/passwd #打印最后1行

(2)通过模式匹配打印指定内容

sed -n '/^root/p' /etc/passwd #打印行首为root字符串的行。输出root:x:0:0:root:/root:/bin/bash

如果需要匹配多个模式呢,可以使用如下方式:

sed -n '/^root/{/bash/p}' /etc/passwd #同时匹配行首为root且包含bash字符串的行

(3)通过指定行范围打印内容

sed -n '1,3p' /etc/passwd #打印第1-3行内容
sed -n '1,$p' /etc/passwd #打印全文内容

(4)通过2个模式匹配指定行范围打印内容

sed -n '/root/,/oracle/p' /etc/passwd # 打印匹配root字符串到oracle字符串的行

说明:如果第1个模式(/root/)没有匹配到,则输出为空。如果第二个模式(/oracle/)没有匹配到,则会打印到最后一行。

(5)组合行号和模式匹配指定行范围打印内容

sed -n '3,/root/p' /etc/passwd  #打印第1行到最先匹配包含root字符串的行

2、根据指定匹配模式获取行号

(1)获取行首为oracle字符串的行号

sed -n '/^oracle:/=' /etc/passwd #获取行首oracle字符串的行号

3、根据指定行号或匹配模式对文件整行内容增加、删除、修改

(1)在指定行号前插入文件内容

sed '3i\ new line' /etc/passwd #在第3行前插入内容为new line的行

(2)在指定行号后插入文件内容

sed '3a\ new line' /etc/passwd #在第3行后插入内容为new line的行

(3)在指定行或者行范围内替换文本

sed '3c\ new line' /etc/passwd #将第3行替换为内容为new line的行
sed '1,3c new line' /etc/passwd #将第1-3行替换为内容为new line的行

(4)删除指定行或者行范围内的文本内容

sed '1d' /etc/passwd #删除第1行
sed '1,3d' /etc/passwd #删除第1-3行
sed '$d' /etc/passwd #删除最后1行
sed '/root/d' /etc/passwd #删除包含root的行
sed '3,/root/d' /etc/passwd #删除第1行到最先匹配包含root字符串的行
sed '/root/,/oracle/d' /etc/passwd #删除匹配root字符串到oracle字符串的行

4、文本内容字符串替换

(1)将全文IP1 192.168.0.1替换为IP2 127.0.0.1。

sed 's/192.168.0.1/127.0.0.1/g' filename

(2)指定行范围替换IP1 192.168.0.1替换为IP2 127.0.0.1。

sed '1,5s/192.168.0.1/127.0.0.1/g' file

(3)在文件中每行最后添加一个abc字符串

sed 's/$/abc/g' filename

(4)引用匹配模式内容替换。通过&号实现。在匹配内容前加"hello"

echo "Java:Python:Ruby" | sed 's/Java/hello &/g' #输出hello Java:Python:Ruby

(5)通过模式匹配指定行进行内容修改。将匹配到root字符串的行中的IP进行替换。

sed '/root/s/192.168.0.1/127.0.0.1/g' 

5、获取shell变量

(1)获取shell变量内容替换指定字符串,使用双引号包含sed命令。举例如下

var="Ruby"
echo "Hello Java" |sed "s/Java/${var}/g" #输出Hello Ruby

Linux sed命令使用方法的更多相关文章

  1. [转帖]linux sed命令

    linux sed命令就是这么简单 https://www.cnblogs.com/wangqiguo/p/6718512.html 用到的最多的就是一个sed -i 's/nn/mm/' 的命令了. ...

  2. 【转】linux sed命令

    转自:linux sed命令就是这么简单 参考:Linux三大剑客之sed:https://blog.csdn.net/solaraceboy/article/details/79272344 阅读目 ...

  3. linux sed命令参数及用法详解

    linux sed命令参数及用法详解 http://blog.csdn.net/namecyf/article/details/7336308 1. Sed简介 sed 是一种在线编辑器,它一次处理一 ...

  4. Linux 常用命令使用方法大搜刮

    Linux 常用命令使用方法大搜刮 1.# 表示权限用户(如:root),$ 表示普通用户  开机提示:Login:输入用户名  password:输入口令   用户是系统注册用户成功登陆后,可以进入 ...

  5. 理解linux sed命令

    理解linux sed命令(2010-02-27 18:21:20) 标签:linuxshellsed替换 分类:革命本钱 1. Sed简介sed是一种在线编辑器,它一次处理一行内容.处理时,把当 前 ...

  6. linux sed命令(擅长输出行)(转)

    linux命令总结sed命令详解 Sed 简介 sed 是一种新型的,非交互式的编辑器.它能执行与编辑器 vi 和 ex 相同的编辑任务.sed 编辑器没有提供交互式使用方式,使用者只能在命令行输入编 ...

  7. linux sed命令详解

    简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的 ...

  8. Linux sed命令实例详解

    简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的 ...

  9. [转载]linux sed命令详解

    简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的 ...

随机推荐

  1. 在html中用js代替${pagecontext.request.getcontextpath}这样就不用使用jsp了

    var pathArray = window.location.pathname.split('/');  var secondLevelLocation = pathArray[1];  var l ...

  2. gcc 工作流程

    gcc常用参数: 1:-v/--version 2:-I :指定头文件包含路径 3:-c :将汇编文件生成一个二级制文件,得到.o文件 4:-o :指定生产的文件名 5:-g :gdb调试的时候需要加 ...

  3. Android被忽略的tools

    自动生成的布局xml文件,很多都带有tools字样:但是大部分都被我们删除了: 其实它的作用是让我们这些开发者预览用的,十分的方便: 事例一个TextView: <TextView androi ...

  4. Android图片变形,ImageView属性的设置。

    <ImageView android:id="@+id/iv" android:layout_width="match_parent" android:l ...

  5. CF 966E May Holidays

    /* 考虑对于询问分块, 每根号n个询问做一次 考虑一次询问, 我们建立出虚树来每条链上的更改一定是一样的, 然后会有根号条链 对于每条链上的点按照w基数排序并且合并相同, 然后每次更改 就是一个指针 ...

  6. git将多个commit合并成一个

    1. 查看提交历史(最近10个) git log - 2. 回到前面第十个commit,且将后面九个commit提交的内容状态改为未提交 git reset commitID(第十个commit的ID ...

  7. JVM总结-java对象的内存布局

    在 Java 程序中,我们拥有多种新建对象的方式.除了最为常见的 new 语句之外,我们还可以通过反射机制.Object.clone 方法.反序列化以及 Unsafe.allocateInstance ...

  8. 安全测试7_Web安全在线工具

    1.搜索引擎语法简单讲解:(实际上就是搜索引擎的高级搜索) 类似百度:可以看到下图我们是想在指定站点搜索包含login的页面,搜索语法为site:(testphp.vulnweb.com) " ...

  9. 5.1_非监督学习之sckit-learn

    非监督学习之k-means K-means通常被称为劳埃德算法,这在数据聚类中是最经典的,也是相对容易理解的模型.算法执行的过程分为4个阶段. 1.首先,随机设K个特征空间内的点作为初始的聚类中心. ...

  10. EF大数据批量处理----BulkInsert

    之前做项目的时候,做出来的系统的性能不太好,在框架中使用了EntityFramework,于是就在网上查资料,研究如何提高EF的性能. 在这分享一篇博客 批量操作提升EntityFramework的性 ...