sed命令使用

一、sed简介

   sed是一种在线编辑器,一次处理一行内容。处理时,把当前处理的行存储在历史缓冲区,传给“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非使用重定向存储输出。sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

二、定址

   可以通过定址来定位你希望编辑的行,该地址用数字构成,用逗号分隔的两行数表示已着两行为起止的行的范围(包括行数表示的那两行)。例如1,3表示1,2,3行,$表示最后一行。范围可以通过数据,正则表达式或者二者结合的方式确定。

三、sed命令

调用sed命令有两种形式:

sed [option] 'command' file(s)

sed [option] -f 'command' file(s)

a\

在当前行后面加上一行文本

b lable

分支到脚本总带有标记的地方,如果分支不存在则分支到脚本的末尾

c\

用新的文本改变行的文本

d

从模板块(pattern space)位置删除

D

删除模板的第一行

i\

在当前行上面插入文本

h

拷贝模板块的内容到内存中的缓存区

H

追加模板块的内容到内村中的缓存去

g

获得内存缓冲区的内容,并替代当前模板块中的文本

G

获得内存缓冲区的内容,并追加到当前模板块的文本的后面

l

列表不能打印字符的清单

n

读取下一个输入行,用下一个命令处理新的行,而不是用第一个命令

N

追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码

p

打印模板块的行

P

打印模板块的第一行

q

推出sed

r file

从file中读行

t label

if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令出,或者到脚本的末尾
T lable

错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令出,或者到脚本的末尾

w file

写并追加模板块到file末尾

W file

写并追加模板块的第一样到file末尾

表示后面的命令对所有没有被选定的行发生作用
s/regexp/string/

用string替换正则表达式regexp

=

打印当前行号码

#

把注释扩展到下一个换行符以前

以下是替换标记

g    表示行内全面替换

p    表示打印行

w    表示把行写入一个文件

x    表示互换模板块中的文件和缓冲区中的文件

y    表示把一个字符翻译为另外的字符(但是不用于正则表达式)

四、选项

-e command,–expression=command

允许多台编辑

-n,–quiet,–silent

取消默认输出

-f,–filer=script-file

引导sed脚本文件名

-V

版本信息

五、例子

1、d(删除)功能

    sed ‘2d’ example   删除example文件的第二行

    sed 'n1,n2d' example 删除example文件的n1行到n2行

    sed ‘2,$d’ example 删除example文件的第二行到末尾

    sed '$d' example 删除example文件的额最后一行

    sed '/text/d' example 删除example文件中所有包含text的行

2、s(替换)功能

    sed 's/test/mytest/g' example 在整行范围内把text替换为mytest.如果没有g标记,则只有每行第一个匹配的test被替换成mytest

    sed -n 's/test/mytest/p' example    -n选项和p标志一起使用表示只打印那些发生替换的行.也就是说,如果某一行的开头test被替换成mytest,就打印他 

    sed 's/^192.168.0.1/&localhost/' example   &符号表示替换字符串中被找到的部分,所以192.168.0.1开头的行都会被替换成它自己加localhost,变成192.168.0.1localhost

    sed -n 's/^\(love\)able/\1es/p' example   love被标记为1组,所有loveable会被替换成lovers,而且替换的行会被打印出来

    sed 's#10#100#g' example   不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以,#在这里是分隔符,带了原先默认的/分隔符.表示把所有的10替换成100

   选定行的范围:逗号

    sed -n '/test/,/check/p' example   所有模板test和check所确定的范围内的行都被打印

    sed -n '5./^test/p' example 打印从第五行开始到第一个包含以test开始的行之间的所有行

    sed '/test/,/check/s/$/sed test/' example 对于模板test和check之间的行,每行的末尾用字符sed test替换

   

   多点编辑: e 命令

    sed -e '1,5d' -e 's/test/check/' example    

   -e选项允许在同一行里执行多条命令.如例子所示,第一条命令是删除1至5行,第二条命令是用check替换test,命令的执行顺序对结果有影响,如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果

    sed –expression='s/test/check/' –expression='/love/d' example

   y一个比-e更好的命令是–expression,它能给sed表达式赋值

从文件读入: r 命令

    sed '/test/r file' example   

   file里的内容被读进来,显示在于test匹配行的后面,如果匹配多行,则file的内容将显示在所有匹配行的下面

写入文件: w 命令

    sed -n '/test/w file' example    在example中所有包含test的行都被写入file里

  追加命令: a 命令

    sed '/^test/a\\–>this is a example' example    'this is a example'被追加到以test开头的行的后面,sed要求命令a后面有一个反斜杆

  插入命令: i 命令

    sed '/test/i\\

    new line

    ———' example    

  如果test被匹配,则把饭斜杠后面的文本插入到匹配行的前面

  下一个: n 命令

    sed '/test/{n;s/aa/bb/;}' example    

   如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续

  变形:y命令

    sed '1,10y/abcde/ABCDE/' example    把1-10行的所有abcde转变为大写,注意,正则表达式元字符不能使用这个命令

  推出:q命令

    sed ‘10q’ example   打印完第10行后,退出sed

sed高级编辑命令

    h:把模式空间(pattern space)中的内容覆盖至保持空间(hold space)中

    H:把模式空间中的内容追加到保持空间中

    g:从保持空间中取出内容覆盖至模式空间中

    G:从保持空间中取出内容追加至模式空间中

    x:把模式空间中的内容和保持空间中的内容进行互换

    n:读取匹配到的行的下一行覆盖至模式空间

    N:追加匹配到的行的下一行至模式空间

    d:删除模式空间中的行

    D:删除当前模式空间开端之\n的内容(不再传至标准输出),放弃之后的命令,但是对剩余模式空间重新执行sed命令

  

 

1、删除/etc/grub2.conf文件中所有以空白开头的行行首的空白字符

 sed 's/^[[:space:]]\+//' /etc/grub2/cfg

2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符

 sed 's/^#[[:space:]]\+//' /etc/fstab

3、在/root/install.log每一行行首增加#

sed 's/^/#/' /root/install.log

4、在/etc/fstab文件中不以#开头的行的行首增加#

sed '/^[^#]/#/' /etc/fstab

    

原创文章,作者:black_fish,如若转载,请注明出处:http://www.178linux.com/30312

(0)
black_fishblack_fish
上一篇 2016-08-12 09:02
下一篇 2016-08-12 09:02

相关推荐

  • RAID与逻辑卷

        RAID与逻辑卷作为磁盘管理的方式,各有各的优势。RAID是多个磁盘合成一个阵列,以便提供更好的性能;逻辑卷相对于分区来说,可以在线扩展空间,也可以缩减空间。可以利用软件的方式来实现RAID与逻辑卷。 一、利用软件方式实现RAID     利用sdb sdc sdd sd…

    2017-08-12
  • Linux任务计划

    Linux任务计划主要分为分为两种分别是一次性任务计划和周期性任务计划实现工具主要是at和crontab下面将详细介绍任务计划工具的使用。 1、at命令一次性任务计划 at命令是由atd服务提供的其主程序包是atd在CentOS6上可以使用service atd start命令来启动在CentOS7上需要使用systemctl start atd.servi…

    Linux干货 2016-09-11
  • N28-第一周

    1. 描述計算機的組成及其功能。
    2. 按系列羅列Linux的發行版,並描述不同發行版之間的聯繫與區別。
    3. 描述Linux的哲學思想,並按照自己的理解對其進行解釋性描述。
    4.說明Linux系統上命令的使用格式;詳細介紹ifconfig、echo、tty、startx、export、pwd、history、shutdown、poweroff、reboot、hwclock、date命令的使用,並配合相應的示例來闡述。
    5.如何在Linux系統上獲取命令的幫助信息,請詳細列出,並描述man文檔的章節是如何劃分的?
    6.請羅列Linux發行版的基礎目錄名稱命名法則及功能規定。

    Linux干货 2017-12-04
  • N25第三周作业(用户组,和文本管理)

    列出当前系统 上所有已经登录用户的用户名,注意:同一个用户登录多次,则只显示一次即可. 列出最后登录到当前系统的用户相关信息. 命令who查看所有用户 , tail查看后几行 取出当前系统上被用户当作其默认shell的最多那个shell. 命令cut 分割 , -d 指定分隔符,-f指定字段 uniq 显示或忽略重复行信息   -c:显示并统计重复…

    Linux干货 2016-12-19
  • N25-第一周

    一:计算机主要组成及其功能 计算机的主要组成部分可以归纳为以下五个部分:控制器、运算器、存储器、输入设备、和输出设备。  功能介绍:         1.控制器          …

    Linux干货 2016-12-04
  • Nginx 编译安装

    Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服 1、Apache服务器和nginx的优缺点: Apache具有很优秀的性能,而且通过模块可以提供各种丰富的功能。 1)首先Apache对客户端的响应是支持并发的 ,运行httpd这个daemon进程之后,它会同时产生多个子进程/…

    Linux干货 2017-02-06

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-12 12:05

    文章整体结构清晰,层次分明,可以试着将自己练习过程结果展示在博文中哦。这样会让你的博客看起来更清晰呢