sed编辑器: 非交互

流处理,每次只处理一行:#N行,-n屏蔽sed的默认输出,默认打印读取的每行,-i表示确认处理

格式:sed 【选项】 '条件指令' 文件名

选项 -n:屏蔽默认输出(全部文件)#不要同更改文件的指令同使用

-i:直接修改文件内容

-r:启用扩展的正则表达式,若与其他选项同用,作为首选项,使用"/正则表达式/指 令"格式

{}:组合多个命令,以分号分隔

指令:

p:打印行

2,4p 打印2,3,4行,是什么功能就将p换成什么指令

d:删除行

2d:4d 删除2,4行 #可以利用替换为空来删除

s:替换

s/原/新/ 替换每行第一个 s/原/新/3 替换每行第3个 s/原/新/g 替换所有 s前面可以加行号N;/替换符可以自定义,只要格式一样

面试题:sed 's9\98\97\99\9\977\99' 文件 #更改98979为99779,改变了替换符,斜线转义

练习

  1. [root@localhost shell]# sed -r 's#^(.)(.)(.*)(.)(.)$#\1\4\3\2\5#' ip #对换一行中的第二个和倒数第二个,使用()复制,\位置对应数字进行粘贴

D3VICE = ensE3

W0ADDR = 00:0c:29:e4:7f:H8

TePE = EthernYt

U6ID = ee4122d2-710b-478a-9592-dbc3ecec05U9

OeBOOT = yNs

Ne_CONTROLLED = yMs

InV6INIT = Po

UnERCTL = So

I.ADDR = 1.1.4P2

N.TMASK = 255.255.255E0

G.TEWAY = 192.168,4A1

ZiNE = publOc

  1. sed -n '$=' 文件名 #显示文件总行
  2. sed -r '3,5s/^/#/' 文件 #在文件3到5行添加注释
  3. sed -r '3,5s/^#//' 文件 #去除3,5的注释
  4. sed -r 's/^ //g' 文件 #删除文件所有开始的空格,^后有空格
  5. sed -r '/ipadd/s/192.168/1.1/g' 文件 #将开头为ipadd行中的192.168替换成1.1
  6. sed '3r /etc/hosts' a.txt #/etc/hosts读入到a.txt的第3行
  7. sed '3,5w b.txt' a.txt #a.txt中的3到5行另存为b.txt
  8. sed '3h;5g' a.txt #a.txt中的第3行复制到第5行,h表示复制,g表示粘贴,小写表示覆盖,大写表示追加
  9. sed -n '/关键字/p' 文件 #打印包含关键字的行,可以用d删除

注:脚本中要在sed中传入参数,将关键字的单引号改为双引号

posted @ 2018-10-28 16:44  KAZUYA  阅读(122)  评论(0编辑  收藏  举报