文本三剑客之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 14:39
下一篇 2018-04-15 15:09

相关推荐

  • centOS6.9 防火墙的关闭以及开启

    有的时候,我们需要对系统的防火墙进行操作,今天小编就给大家讲解一下如何开启以及关闭CentOS6.9系统下的防火墙。 输入:cat /etc/issue 查看版本 (一)通过service命令 service命令开启以及关闭防火墙为即时生效,下次重启机器的时候会自动复原。 查看防火墙状态:service iptables status ,记得在CentOS6…

    Linux笔记 2018-04-20
  • SAMBA服务介绍及相关实验

    Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。

    2018-06-29
  • 进程管理工具

    进程管理工具

    Linux笔记 2018-04-20
  • 日常——find练习

    1、查找/var目录下属主为root,且属组为mail的所有文件# find /var -user root -group mail -ls2、查找/var目录下不属于root、lp、gdm的所有文件# find /var -not \( -user root -o -user lp -o -user gdm \) -ls3、查找/var目录下最近一周内其内…

    2018-04-13
  • awk的使用

    awk -v设置变量 -F 指定分隔符 内置变量 FS:输入字段分隔符,默认为空白字符,读入内容的分隔符 OFS:输出字段的分隔符 RS:指定行(记录)分隔符 ORS:输出记录分隔符 NF:字段数量 NR:记录的数量 ARGC:命令行参数的个数 ARGV:数组,保存的是命令行所有的参数   例1:不依赖文件和标准输入 [root@centos7 ~…

    Linux笔记 2018-05-21