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

wKioL1jPa5zCh5sGAAAKHwhYtmE863.png-wh_50

  • 知识点二:

打印包含某个字符串的行

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

wKiom1jPbHHQRKaJAAAKzutDNUY960.png-wh_50

  • 知识点三:

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

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

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

wKiom1jPbi-Aye2vAAAZFNZWwDo504.png-wh_50

注意:^[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表示替换第一行spacer.gif和第二行

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'

wKioL1jPjG2Qo0sqAAAlKJ2OUN0542.png-wh_50

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

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

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

wKioL1jPjXHhT7HmAAAXxoSnrkE221.png-wh_50

  • 知识点十:

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

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

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

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






     本文转自品鉴初心51CTO博客,原文链接:http://blog.51cto.com/wutengfei/1908448,如需转载请自行联系原作者




相关文章
|
1月前
|
Perl
sed的用法
sed的用法
27 2
|
2月前
|
Unix Perl
sed的具体用法
sed的具体用法
18 2
|
2月前
|
Perl
sed的基本语法
sed的基本语法
17 2
|
2月前
|
Perl
sed的复杂用法
sed的复杂用法
27 2
|
10月前
|
Perl
sed 基本用法
sed 基本用法
64 0
|
缓存 关系型数据库 MySQL