sed命令学习

sed编辑器,处理文本过程如下:

sed把当前处理的行保存在一个临时缓冲区中,然后处理缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,然后下一行读入,处理和显示。处理完输入文件的最后一行后,sed便结束运行。

sed [参数] '命令' file

sed中模式空间(临时)和保持空间

passwd代表文件名

1,查询语句 

输出第三行

 sed -n '3p' passwd

输出第3 到5行

 sed -n '3,5p' passwd

删除第3到5行

 sed -n '3,5d' passwd

表示查询出passwd文件中存在sbin字符的所有行并打印出来,其中两个/表示的是其中的是正则表达式,-n和/p是该命令的参数,需要联合使用:

sed -n ‘/sbin/p’ passwd 

2,紧跟在s命令后的字符就是查找串和替换串之间的分隔符。分隔符默认为正斜杠,但可以改变。无论什么字符(换行符、反斜线除外),只要紧跟s命令,就成了新的串分隔符:

head -3 passwd | sed 's#bin#Replace#g

sed -n '1,3s' 's#bin#Replace#g' passwd

e选项:用于sed执行多个指令,指令放置顺序对最终结果有影响

 head -5 passwd | sed -e '1,3d' -e 's/sh/Replace/g'

r命令:当匹配到bin时,就读入文件的内容

head -3 passwd | sed '/bin/r append.txt'

w命令:匹配到时,写入到文件中

sed -n '/hrwang/w me.txt' datafile

a命令:匹配到时追加到文件中

sed '/^hrwang/a append this line to file datafile

q命令:q命令将导致sed程序退出,不再进行其它的处理

sed '/hrwang/{s/hrwang/HRWANG/;q;}' datafile

3,sed命令:没有重定向不会真正修改源文件中的内容。sed不会更改文件内容

  重定向指令为 >

  或者使用指令 -i, 直接修改文件内容,不过-i会额外添加一行,造成误解,不可用

4,新增语句:

  sed '1a the content append to file' passwd

  sed '1i the content inset to the forward of first line' passwd

  sed '1c replace the first line of file to this content' passwd

  sed 's/false/true/' passwd # replace false in this line to true

  sed '/hello/aworld' mk ##a代表指定行后增加新行

  sed 's/hello/hello world/g' mk

  sed 's/hello/hello world/g' mk

5 删除语句:

  sed '/postgres/d' passwd # delete the line suit this rule

  sed '2d' passwd # delete the second line

  sed '/^UUID/d' mk

  sed '/^$/d' mk

6 替换语句:

  修改并修改文件

  sed  -i '/s/cpu_core=8/cpu_core=72/' mk 

  如果使用 ‘s/cpu_core=8/cpu_core=72/p' mk 此行后会新加一行cpu_core=72;

  如果末尾加g,说明是全局替换

  sed -i 's/westos/redhat/g' passwd

  整行替换

  sed '/hello/chello world' mk

  使用i命令向数据流插入文本行,i命令会在指定行前增加一个新行

  sed '/hello/iworld lee' mk

7 打印文本:

  sed -n '/:/p' mk

  sed -n '/^#/p' mk

  sed -n '/^#/!p' mk

  sed -n '1~2p' mk ##打印奇数行

  sed -n '2~2p'  mk ##打印偶数行

8 参数:

  -e 默认情况:在处理输入时。sed后面直接添加编辑命令

  当一条sed中执行多个编辑命令时,-e才有意义,且不可省略,其他无意义

  -n参数:不会把缓冲区内容输入到屏幕上,结合p指令使用,只输出匹配的行

   sed -n '/^#/p' lee_temp #输出以#开头行

   sed -n '/n$/p' lee_temp #输出以n结尾行

   sed -n 's///gp' #加g与不加g的区别是,加g意味着全行进行指令操作,不加的话,只将指令运用于第一个匹配到的位置

原文地址:https://www.cnblogs.com/lixiangfu/p/11207567.html