sed工具介绍
- 介绍
sed不仅能够实现如grep的匹配功能,而且还能实现文本替换功能等。
sed的匹配功能
- 实验概览
sed -n '5'p test.txt
sed -n '1,5'p test.txt
sed -n '1,$'p test.txt
sed -n '/root/'p test.txt
sed -n '/^1/'p test.txt
sed -n 'in$'p test.txt
sed -n '/r..o/'p test.txt
sed -n 'oo*'p test.txt
sed -e '1'p -e '/111/'p -n test.txt
打印某行
- 语法sed -n 'n'p fiename
p: 参数p表示打印
-n:只打印我们指定的行,无关选项不加。
不加-n:会在指定行,后面显示所以其他的行。
'n':单引号里的n表示第几行;
'1,$':表示打印所有,**$**表示前面指定1行的后面的所有行
注:可以指定一个范围打印,如 sed -n '1,3' test.txt
打印包含某个字符串的行
- 语法sed -n '/root/'p fiename
//:表示匹配字符串
注: 在打印字符串时,在grep中的特殊字符(&*等)同样能在sed中使用 。
-e:加上此选项能够同时实现多个行为。如在匹配行的同时匹配一个字符串,若两个不同的表达式,都匹配的是同一个字符串或行,那么将会打印两次。
I,大i 匹配时不区分大小写,如sed -n '/bus/'Ip /etc/passwd
- 特殊符号+
在sed使用特殊符号+匹配时,需要加脱义符号,如 sed -n '/r+t/'p test.txt;
sed -nr: 加r命令后,就不用加脱义字符
删除某些行或字符串
- 语法sed '1,20'd /etc/passwd
d,表示删除动作,这个操作不会修改文件的实际内容
- 直接删除文件选项
-i:会直接删掉文件内容,并且能指定字符串名
sed的替换功能
全局替换
- 语法:sed '1,10s/root/toor/g' test.txt
参数s:表示替换的动作
参数g:表示本行全局替换,如不加g则只替换本行常出现的第一个字符串
- 替换也是能够使用正则表达式的
如:sed -r '1,10s/ro+/r/g' test.txt 注:这里因为sed 使用+ 所以用了 -r选项(取消脱义字符)
调换两个字符的位置
- 示例:准备将途中的两个字符串调换位置,包括后面的所有字符串一起首尾调换
- 正确命令如下
sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/'
- 解释
1.格式
s//:表示全部,不指定范围就是全部
-r:取消脱义符号
2.在调换前,我们要先用表达式,表答我们需要调换的字符串;
s//:表示全部,不指定范围就是全部
[^:]:表示一个非冒号的字符
[^:]+:加号表示一个或多个 ,如root
([^:]+):小括号表示等会我们需要调用括号内的东西;
::表示间隔的特殊符号
. **:表示全部匹配
**(.):** 表示贪婪匹配,意为直到最后一个冒号为止的字符串
([^:]+):表示一个非零字符串
3.调换位置
\3:\2:\1/:这里的意思是3个字符串的位置;本应该是123 ,但是我们要给他们调换位置,所以变成了321,冒号是间隔符号
- 注意:脱义或者替换一些分隔符,比如用@,只要能区分开就行
把文档里所有的英文字母删除
- 实际意义就是替换为空
如:sed 's/[a-zA-Z]//g' test.txt
在所有行前面加上aaa
- 示例
head test.txt |sed -r 's/(.*)/aaa:&/' &:保存搜索字符用来替换其他字符,如s/asd/&/,asd这成asd。