首页 > 代码库 > sed用法(一)

sed用法(一)

sed用法(一)


sed 可以实现 grep 的大部分功能,而且还可以查找替换。唯一缺陷是不能有颜色区分显示。

-n 只打印符合规则的行

打印指定行 p表示print

  • 知识点一:

#sed ‘10‘p -n 1.txt 打印第10行

#sed ‘1,4‘p -n 1.txt 打印1-4行

#sed ‘5,$‘p -n 1.txt 打印5到末行

#sed ‘10‘p 1.txt 不加 -n 打印所有的行,如下图所示:

#sed ‘/root/‘p 1.txt|wc -l

#sed ‘/root/‘p -n 1.txt|wc -l

技术分享

  • 知识点二:

打印包含某个字符串的行

#sed -n ‘/root/‘p 1.txt

技术分享

  • 知识点三:

可以使用 ^ . * $ 等特殊符号

#sed -n ‘/root/‘p 1.txt 【含有root的行】

#sed -n ‘/^roo/‘p 1.txt 【以roo开头的行】

技术分享

注意:^[roo]与^(roo)的区别!

#sed -n ‘/r.*t/‘p 1.txt 贪婪匹配==cgrep -n ‘r.*t‘ 1.txt

#sed -n ‘/r\?t/‘p 1.txt ?需要脱意符号\ ==egrep -n ‘r?t‘ 2.txt==grep -n ‘r\?t‘ 2.txt

  • 知识点四:

sed 不识别 + ? 并且符号| {} 组合符号() 等符号,需要借助脱意符号 \ 或者 使用选项 -r

#sed -n -r ‘/ro+/‘p 1.txt == egrep -n ‘ro+‘ 1.txt == grep -n ‘ro\+‘ 1.txt

#sed -n ‘/ro\+/‘p 1.txt

# sed -n ‘/\(oo\)\+/‘p 1.txt

# sed -n -r ‘/(oo)/‘p 1.txt

# sed -r -n ‘/roo|ftp/‘p 1.txt

sed支持grep的所有表达式,取非,开头结尾等,需要用-r。

  • 知识点五:

-e 同时进行多个表达式

#sed -e ‘/root/p‘ -e ‘/body/p‘ -n 1.txt

; 同时进行多个表达式

#sed ‘/root/p ; /body/p‘ -n 1.txt

一个分号即可,无需全部括起来。分号前面一定要有p,-n位置在前在后没有影响。如果一行里面,有root,又有body,那么会在屏幕上出现两次这个结果。如果是或者的命令,#sed -n -r ‘/root|body/‘p 1.txt 只会显示一次结果,或者的命令只会运行一次。

  • 知识点六:

不显示指定的行,并非删除文本中的行

#sed ‘/root/‘ d 1.txt 删除包含root的行

#sed ‘1‘d 1.txt 删除第一行 ‘1d‘ 或者 ‘1‘d

#sed ‘1,10‘d 1.txt 删除1到10行

#sed ‘/[a-zA-Z]/‘d 1.txt

#sed ‘/[0-9]/‘d 1.txt

  • 知识点七:

替换功能(重点,有时面试会问到!)

#sed ‘1,2s/ot/to/g‘ 1.txt 全局替换,全部显示

1,2表示替换第一行技术分享和第二行

s 替换的意思

g 全局替换

& 增加替换

命令里面的 / 可以用 # 或者 @ 替换

#sed ‘1,2s@ot@to@g‘ 1.txt

#sed ‘1,10s/nologin/login/g‘ 1.txt

#sed -n ‘1,10s/nologin/login/g‘p 1.txt 只显示1-10行修改的行

# sed -n ‘1,10s/nologin/login/gp‘ 1.txt 只显示1-10行修改的行

# sed -n ‘1,$s/nologin/login/g‘p 1.txt 修改第一行到最后一行并打印

# sed -n ‘1,10s/\/sbin\/nologin/login/g‘p 1.txt ==

#sed -n ‘1,10s@/sbin/nologin@login@g‘p 1.txt 只替换1-10行 /sbin/nologin 里面的nologin为 login,替换后,1-10行的/sbin/nologin替换为 /sbin/login

#sed -n ‘s@^.*$@login@g‘p 1.txt 修改所有的行为 login

#sed -n ‘s@^.*$@&login@g‘p 1.txt 在所有的行后面增加 login

  • 知识点八:

删除所有数字

#sed ‘s/[0-9]//g‘ 1.txt

其实就是把所有数字替换为空格

删除所有非数字

#sed ‘s/[^0-9]//g‘ 1.txt

删除所有特殊符号

#sed -n ‘s/[^0-9a-zA-Z]//g‘p 1.txt

  • 知识点九:

调换两个字符串位置(重点,面试会问到)

#head -n2 1.txt |sed -r ‘s/(root)(.*)(bash)/\3\2\1/‘==head -n2 1.txt |sed -r ‘s/(root)(.*)(bash)/\3\2\1/g‘

技术分享

在sed中可以用()表示一个整体,本例中把 root 和 bash的位置调换,后面的\1\2\3 分别表示第一个小括号里面的内容,第二个小括号里面以及第三个小括号里面的内容。

# head -n2 1.txt |sed -r ‘s#(^[a-z0-9]+)(:.*)(:.*)#\3\2\1#g‘

前两行的第一段,第三段调换位置。

技术分享

  • 知识点十:

-i 直接修改文件内容 【不建议使用】

#sed -i ‘1,19‘d 1.txt 直接删除文本里面的1-19行

#sed -i ‘s/ot/to/g‘ 1.txt

其实使用的是 s 的替换功能



本文出自 “圣骑士控魔之手” 博客,请务必保留此出处http://wutengfei.blog.51cto.com/10942117/1908448

sed用法(一)