文本三剑客之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

相关推荐

  • 基础不牢,地动山摇——软链接与硬链接。

      inode 说明   说到软链接与硬链接就不得不提到一个概念——inode (索引节点号)。简单说linux系统中索引节点号与身份证号码一样,同一分区中文件将会被分配唯一的号码就是索引节点号。文件名是为了方便人使用,而索引节点号是计算机来区分文件的标志。 1.硬链接 硬链接(hard link)就是一个文件的一个或多个文件名。下面用试验说明硬链接特性 例…

    2018-07-29
  • 第二章Linux基础学习笔记

    本章内容:
    1.用户登录
    2.终端
    3.shell介绍
    4.执行命令
    5.简单命令
    6.Tap键补全
    7.命令行历史
    8.bash快捷键
    9.使用gnome-terminal
    10.whatis
    11.command –help
    12.man and info
    13.本地帮助文档/usr/share/doc/
    14.官网在线文档
    15.其他网站和搜索

    Linux笔记 2018-03-31
  • hell脚本基础知识详细介绍

    Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。 它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件…

    Linux笔记 2018-05-14
  • 二进制安装MySQL(MariaDB)

    在CentOS上部署MySQL有多种方式,如yum安装、编译安装、二进制安装。其中后二者可以有更多自定义特性,但安装过程略繁琐,本文简单介绍二进制安装方式。(请根据自己的情况调整目录)

    Linux笔记 2018-06-12
  • history man info tab 的用法

    “whatis conmand =man -f cm 简单说明 centos6 安装what is 输入 make whatis centos7 创建 mandb “内部命令用 help conmand 外部命令 用 command –help 外部命令 man command (外部命令用man比较详细) 可以用/ 搜 …

    Linux笔记 2018-03-31
  • 第六周博客作业

    一、简述osi七层模型和TCP/IP五层模型
    二、简述iproute家族命令
    三、详细说明进行管理工具htop、vmstat等相关命令,并举例
    四、使用until和while

    2018-04-20