sed
demo
sed -i 's/webapp\/webapp/webapp/gp' `grep -r /home/fox/sbcode *|awk '{print $1}'|tr -d :`
查找目录下所有包含/home/fox/sbcode的文件,然后替换其中的内容webapp/webapp为webapp
basic
sed 是一款流编辑工具,用来对文本进行过滤与替换工作,sed通过输入读取文件内容,但一次仅读取一行,某些指令处理后输出,sed更适合处理大数据文本
工作原理
sed在处理文本的时候,会在内存上创建一个模式空间,然后把这个文件的每一行调入模式空间用相应的命令处理,处理完输出;接着处理下一行,直到最后。
与vim区别
vim需要通知处理问及那的哪几行才去处理,而sed默认处理文件所有的行,除非你告诉它不处理哪几行
base use
1.sed [option] [定址commands] [inputfile]
2. option
-n 关闭默认输出,将自动打印所有行
-e 多点编辑,允许多个脚本指令被执行
-r 支持扩展正则+?(){}|
-i 修改源文件
-f 支持使用脚本
3. 定址 commands
3.1定址,1,2个,通知sed去处理哪几行
0个,处理所有行
1个,处理行号所在行
2个,行号,正则表达式,处理被行号或正则匹配的行
3.2.command
p 打印行
d 删除
s 替换
n 替换第几个匹配内容
w 另存为
a 之前添加一行
i 之前行插入文本
y 替换匹配内容
examples
p 与 -n
cp /etc/passwd t1
1.cat n t1|sed -n '1,3p'
打印1-3行
2.cat -n t1|sed -n '/lp/,/halt/p'
查看passwd文件的lp~halt行
3.cat -n t1|sed -n '1~2p'
打印基数行
4.sed -n '/x:[01]:/p' t1
打印 x:0 或 x:1 的行
d
1.cat -n t1|sed '1d'
删除第一行
2.cat -n t1|sed -e '1d' -e '3d'
删除第一行和第三行(与-e选项合用)
3.cat -n t1|sed '1d;3d'
;选项的使用和-e一样
4.cat -n t1|sed '1!d'
取反,除了第一行,其他都删除
s
语法 '[address]s/pattern/replacement/flags'
old new
flags:
n: 1-512 表示替换模式里面出现的第几次内容
p:打印
g:全局修改
w:另存为
demo
1.sed 's/root/ROOT/' t1
替换第一个root-> ROOT
2.sed 's/root/ROOT/g' t1
替换所有的root->ROOT
3.sed 's/root/ROOT/2' t1
替换第二个匹配
4.sed 's/root/ROOT/p' t1
打印
ROOT:x:0:0:root:/root:/bin/bash
ROOT:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin‘
5.sed -n 's/root/ROOT/p' t1
ROOT:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/ROOT:/sbin/nologin
6.sed -n 's/root/ROOT/w/tx' t1
cat tx
ROOT:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/ROOT:/sbin/nologin
另存为tx文件
7.sed 's/^/#/' t1
在文件的每行前面添加 # 注释
8.sed 's/^.//1' t1
删掉文件的第1个字符
9.sed 's/.//2' t1
i
1.sed '1i hello' t1
在第一行插入hello
hello
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
a 从当前行后面插入
1.sed '1a hello' t1
在第二行插入hello
root:x:0:0:root:/root:/bin/bash
hello
bin:x:1:1:bin:/bin:/sbin/nologin
-r 支持扩展正则
1.sed -r 's/^(.)(.)/\1/' t1
//相当于把前两个字符替换成第一个字符,这样就实现了删除第二个字符
y
1. sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' t1
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN
DAEMON:X:2:2:DAEMON:/SBIN:/SBIN/NOLOGIN
替换所有的小写字母
替换匹配行
sed -n '1c ROOT' t1
q 退出
sed '1q' t1
-i
sed -i 's/1/A/g' tx
修改源文件中1->A
-f 支持脚本
sed -f sed.sh tx