跳到主要内容

三剑客之文件操作--sed

# sed stream editor,流编辑器,文本编辑工具

# set [选项] [sed内置命令字符] [输入文件]

# 选项
# -n 取消默认sed的输出,常与sed内置命名p一起使用
# -i 直接将修改结果写入文件,不用-i,sed修改的是内存数据,即原始文件不变
# -e 多次编辑,不需要管道符
# -f 读取sed命令文件
# -r 使用正则表达式

# 内置命令
# a append,对文本追加,在指定行后面添加一行或多行文本
# i insert,在指定行前面插入一行或多行文本
# d delete,删除指定行
# p print,打印指定行,通常p与n一起使用
# s/old/new/g,替换,old为要替换的文本,new为替换后的文本(支持正则),g为全局替换

1.替换文件的root为change,只替换一次,替换所有

sed 's/root/change/' pwd.txt | grep change
sed 's/root/change/g' pwd.txt | grep change
# s 替换动作

2.替换文件所有root为change,且仅仅打印替换的结果

sed -n 's/root/change/gp' pwd.txt
# -n 取消默认sed的输出,常与sed内置命名p一起使用
# g 全局替换
# p 打印动作

3.替换前10行以b开头的用户,改为C,且仅仅显示替换的结果

sed -n '1,10s/^b/C/gp' pwd.txt
# s/^b/C/gp s替换操作/正则以b开头/替换内容/全局替换打印结果

4.替换前10行以b开头的用户,改为C,且将m开头的行改为M,且仅仅显示替换的结果

sed -n '1,10s/^b/C/gp' -e '1,10s/^m/M/gp' pwd.txt
# -e 继续执行操作,作用类似于管道符 |

5.删除第4行后面所有

sed -i '4,$d' pwd.txt
# -i 结果应用到原文件,即修改原文件
# $ 最后一行
# d 删除动作

6.删除从root开始到ftp之间的行

sed -i '/^root/,/^ftp/d' pwd.txt

7.将文件中空白字符开头的行,添加注释符号

sed -e 's/^[[:space:]]/#/g' -e 's/^$/#/g' pwd.txt
# ^$ 空白行

8.删除文件的空白和注释行

sed -n '/^$/d;/^#/dp' pwd.txt
# ; 此次语句结束,效果类似-e

9.给文件的前3行添加@符号

sed -r '1,3s/(^.)/@\1/' pwd.txt
# -r 表示使用拓展正则
# \1 表示分组的内容

10.取出ip地址

ifconfig eth0 | sed '2s/^.*inet[[:space:]]//;s/[[:space:]]*netmask.*//p' -n

11.找出系统版本

cat /etc/centos-release | sed -r 's/^.*release[[:space:]]([^.]+).**/\1/p' -n