sed命令使用

sed 命令

在脚本中实现无交互编辑文本

格式

sed [选项] ‘[动作指令]’ filename

选项

-n 屏蔽默认输出
-e 执行多个sed命令
-i 直接修改文本内容
-i.bak 直接修改文本内容的同时,对原文件进行备份
-r 使用扩展正则表达式

动作指令

a 添加行,在指定行的下方添加内容
i 添加行,在指定行的上方添加内容
p 打印,配合-n 使用
d 删除行
s 替换字符串
c 替换行
r 读取文件,插入至指定位置
w 另存为

打印

搜索条件要使用“/…/”括起来

[root@haha ~]# cat test.txt
haha
heihei
hehe
xixi
hengheng
[root@haha ~]# sed '/haha/p' test.txt
haha
haha
heihei
hehe
xixi
hengheng
[root@haha ~]# sed -n '/haha/p' test.txt
haha

替换

sed ‘s/要被替换的字串/新的字串/g’
s "替换"命令
/…/…/ 分割符 (Delimiter)
分割符 “/” 可以用别的符号代替 , 比如 ","或 "|“或”@"等

sed 's/\/usr\/local\/bin/\/usr\/bin/'
 等价于 sed 's@/usr/local/bin@/usr/bin@'  
sed ‘s/old/new/’    只替换每行的第一个old

sed ‘s/old/new/2’     只替换每行的第二个old

sed ‘s/old/new/g’     全局替换

sed ‘3s/old/new/’    只替换第三行的第一个old

sed ‘1,3s/old/new/’   只替换第一行到第三行的第一
个old

sed ‘1,$s/old/new/’  只替换第一行到最后一行的第
一个old

sed ‘s/old/new/g;s/old1/new1/g’ 替换所有的old
为new,替换所有的old1为new1

删除

sed ‘d’test.txt   ##删除全部

sed ‘3d’ test.txt    ##指定行号删除

sed ‘13d’ test.txt    ##删除指定区间行

sed ‘3,$d’ test.txt     ##删除第三行开始的所有
内容

sed ‘/heng/d’ test.txt      ##删除指定的内容

sed 不会真的取删除源文件内容,这里的删除只是输出
不显示而已,源文件没有发生改变

多个命令的使用

-e 选项

sed -e ‘s/xixi//’ -e ‘s/heng/ha/g’ test.txt
sed ‘s/xixi//;s/heng/ha/g’ test.txt

添加行

i插入 ,a附加
a(i)\文本内容

sed ‘3i \insert’ test.txt    ##在第三行前插
入insert

sed ‘3a \append’ test.txt    ##在第三行后附
加append

sed ‘$a \file end’ test.txt     ##在文件末尾附
加file end

sed ‘24a \append’ test.txt  ##在234行
后分别附加append

sed ‘3i \haha\n\hehe\n\heihei’ test.txt    
##添加多行数据,每行末尾使用\n换行符

sed '2i\hello \
> world \
> haha' test.txt           ##如果想追加或插
入多行数据,则除最后一行外,每行的末尾都要加
入"\"代表数据未完结

修改行

c\用于替换的新文本

sed '2,$c\hello world' test.txt  ##将第二行开
始到结束的所有行替换为hello world

sed '2c\hello world' test.txt     ##将第二行
换成hello world

sed ‘/haha/c/haheihahei’ test.txt   ##将文件
中以包含haha的行替换为指定内容

sed ‘/selinux=enforcing/c/selinux=disabled’ 
/etc/selinux/config      
##将/etc/selinux/config里的selinux=enforcing
的行替换为/selinux=disabled

你可能感兴趣的:(命令,linux)