文本三剑客之sed

我们知道,sed被称为Linux中被称为文本处理三剑客之一,相比于grep命令匹配内容的功能,sed则能够做到对匹配到的文本内容对其进行编辑。

timg_image&quality=80&size=b9999_10000&sec=1524382148&di=60ed062083583003b69f3b1

强大的处理文本的工具sed

我们知道,sed被称为Linux中被称为文本处理三剑客之一,相比于grep命令匹配内容的功能,sed则能够做到对匹配到的文本内容对其进行编辑。

Linux文本处理三剑客:

grep:文本过滤工具(传送门)

sed:文本编辑工具

awk:Linux上的实现gawk,文本报告生成器(传送门)

 

sed,英文全称Stream EDitor,翻译过来就是行编辑器。

用法:

sed[option]…’script’ inputfile…

其中‘script’可表示为’地址定界+编辑命令’

option:

-n  取消默认打印内容到屏幕(示例1)

-e     多点编辑,表达且关系,与grep的-e不同,grep -e表达或关系(示例2)

-f      从指定文件中读取编辑脚本(示例3)

-r      支持使用扩展正则表达式

-i.bak       原处编辑,并备份文件file.bak(示例4)

 

地址定界:

(1)不给地址:对全文进行处理

(2)单地址:

#:指定的行,$:最后一行

/pattern/:支持正则表达式,被此模式所能匹配到的每一行

(3)地址范围:

#,#                         (示例5)

#,+#

/pat1/,/pat2/          (示例6)

/pat1/, #                  (示例7)

(4)~:步进

1~2  奇数行              (示例5)

2~2  偶数行

 

 

编辑命令:

d       删除模式空间匹配的行(示例4)

p       打印当前模式空间内容,追加到默认输出之后(示例1)

a[\]text   在指定行后面追加文本(示例4)

如要实现插入内容空格开头可先追加\再输入空格

支持使用\n实现多行追加(示例8)

i[\]text     在指定行前面插入文本(示例9)

c[\]text    替换指定行尾单行或多行文本(示例10)

w /path/somefile   保存模式匹配的行到指定文件(示例11)

r /path/somefile     读取指定文件的文本匹配的行后(示例12)

注意:w,r后跟文件一定要加空格

可利用此命令定义别名到.bashrc

=       为模式空间中的行打印行号

!    取反,!需加载地址定界和编辑命令中间,如’2!d’(示例13)

 

s///:查找替换,支持使用其他分隔符;s###;s@@@(示例14)

 

示例

以下我们创建文件test进行示例:

创建文件test

 

示例1:sed   ‘1,10p’ /data/test.sed

sed命令默认将文本内容打印到屏幕,由于执行命令p,文本内容被打印了两遍

不加-n

sed  -n  ‘1,10p’ /data/test.sed

sed   -n选项将取消默认输出到屏幕,仅显示p的执行结果

加-n

示例2:sed -n -e ‘1p’  -e  ‘3p’

显示第一行和第三行,-e表示且的关系

-e

示例3:sed -n -f sedscripts.txt  /data/test.sed

将2,5p写入sedscripts.txt文件,-f选项读取sedscripts.txt,并执行文件中内容

-f 引用文件

示例4:sed -i  ‘1,10a#’   /data/test.sed

表示在第1至第10行内容后插入#,-i选项直接编辑了test.sed的文本内容

-i a

sed -i  ‘/#/d’  /data/test.sed

表示将所有带#的行删掉并编辑文本

-i d

示例5:sed -n  ‘3p’     打印第3行内容

sed  -n ‘2,5p’                打印第2至第五行

sed  -n ‘2,+3p’              打印第2至第5行

sed  -n  ‘1~2p’              打印奇数行

sed  -n  ‘2~2p’              打印偶数行

数字定界

示例6:正则定界,表示ifconfig命令输出中开头eth2的行,至开头为lo的行

正则定界

示例7:正则数字混合定界,表示ifconfig命令输出中,eth2开头的行到第12行的内容

正则数字混合定界

示例8:多行插入,将aaa\nbbb插入到每行后面

a多行

示例9:sed  ‘1,10i#’  /data/test.sed

在每一行上面插入#

i上方插入

示例10:sed  ‘1,5c’  /data/test.sed

将test.sed文件中1到5行替换为一个#

c替换匹配

示例11:sed  ‘2,5w  f1’  /data/test.sed

将test.sed文件中第2到第5行内容打印到f1文件中

w 将匹配内容输出到指定文件

示例12:sed  ‘2,5r  f1’  /data/test.sed

将f1的内容插入到第2至第5行

r 跟文件写入匹配行

示例13:sed  -n  ‘2,5!  p’  /data/test.sed

打印除了第2至第5行的内容

!除了

示例14:ifconfig |sed -n “2p”|sed -r “s@.*addr:(.*) Bcast.*@\1@”

利用搜索替代,我们可以将任意段字符串定义成方法,然后表示出整行,再利用后向引用即可取出该字符串。

正则取IP

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/96023

(0)
wangxczwangxcz
上一篇 2018-04-15
下一篇 2018-04-15

相关推荐

  • Linux命令行联系

    马哥第三周

    Linux笔记 2018-06-02
  • liunx 创建用户、文件权限及管理

      创建用户     修改和删除组 更改组密码 更改和查看组成员 文件权限:文件属性 文件属性操作 修改文件的属性和属组 文件权限   文件权限 八进制数字: 修改用户权限:   新建文件和目录的默认权限:               &n…

    Linux笔记 2018-04-08
  • Linux用户组管理及用户权限及管道符应用

    一、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 ]# who |  cut -d ‘ ‘ -f1 | sort -u who:显示所有已经登录用户的用户名 cut -d ‘ ‘ -f1:取第1列字段数据   sort -u:忽略相同行数据 二、取出最后登录到…

    2018-07-07
  • sed作业

    编程基础 程序:指令+数据程序编程风格:过程式:以指令为中心,数据服务于指令对象式:以数据为中心,指令服务于数据shell程序:提供了编程能力,解释执行 程序的执行方式 计算机:运行二进制指令编程语言:低级:汇编高级:编译:高级语言–>编译器–>目标代码 java,C#解释:高级语言–>解释器&#8211…

    2018-04-15
  • IP 命令使用

    ip 1.作用ip是iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具,例如ifconfig、route等,使用权限为超级用户。几乎所有的Linux发行版本都支持该命令。 2.格式ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]] 3.主要参数OPTIONS是修改ip行为或改变其输出的选项。所…

    Linux笔记 2018-05-05
  • 使用Systemd把自作脚本服务化(加入开机启动)

    Systemd的出现,使得自己编写的脚本可更容易的添加进系统服务,进而实现开机启动。

    例如,我们可以把最简单的hello world脚本进行扩展,将其添加进系统服务,使之开机自启动。

    Linux笔记 2018-06-12