首页 > 代码库 > sed
sed
sed是一种支持正则表达式的非交流式编辑器stream editor
sed的常用选项
-n 只显示匹配处理的行(否则会输出所有)
-e 执行多个编辑命令时(一般用 ; 代替)
-i 直接在文件中进行修改,而不是输出到屏幕
-r 支持扩展正则表达式
-f 从脚本文件中读取内容并执行(文件中的编辑命令每行一个,不用 ; 隔开)
sed的常用编辑命令
p 打印匹配行
d 删除指定行
a 在匹配行后面追加
i 在匹配行前面插入
c 整行替换
r 将文件的内容读入
w 将文本写入文件
s 字符串替换(匹配正则表达式)
sed的p命令示例
sed -n ‘/模式/p‘ 输入文件
这里的模式可以是正则表达式也可以是精确字符
模式用/括起,扩展正则要加-r选项
示例:sed -n ‘$p‘ /etc/passwd 显示最后1行
sed -n ‘3,10!p‘ /etc/passwd 显示除了3-10行的内容
df -h |sed -n ‘/\/$/p‘ 显示以/结尾的行
a=/dev/shm
sed -rn "s|$a|yy|; /yy/p" /etc/fstabsed的d命令示例
删除操作可以根据行号和模式匹配进行操作
示例:sed ‘3,5d‘ /etc/fstab
sed ‘/2/d‘ /etc/fstab
sed -r ‘/^$|^#/d‘ /etc/fstab
sed -e ‘/^$/d‘ -e ‘/^#/d‘ /etc/inittab
sed的a命令示例
追加操作可以根据行号和模式匹配进行操作
示例:sed ‘1a 111111‘ passwd 在第一行后面追加后面的字符串
sed ‘/root/a 111111‘ passwd
sed的i命令示例
插入操作可以根据行号和模式匹配进行操作
示例:sed ‘/defaults/i 111111‘ fstab
sed的c命令示例
更改整行操作可以根据行号和模式匹配进行操作
示例:sed ‘/id:/c id:5:initdefault:‘ /etc/inittab 将id:所在行整行替换成后面的字符串
sed的r命令示例
读入操作可以根据行号和模式匹配进行操作
示例:sed ‘$r /etc/hosts‘ /etc/fstab 在fstab文件的末尾后面读入hosts文件的内容
sed的s命令语法格式
sed -n [行号或模式]s/查找内容/替换内容/[替换标记] 文件
替换操作可以根据行号和模式匹配进行操作
替换标记有4种:
数字:替换每行的第几个
g:全局替换,否则只替换第一个字符串。ng从第n个开始替换
p:显示被执行替换操作的行和-n合用
w:将执行替换操作的行输出到指定文件
i:不区分大小写
示例:sed -n "1,10s/^#//p" /etc/passwd 将注释行的#去掉
sed -n "1,10s/$/?/p" /etc/passwd 在每行末尾加上?
sed的s命令可以使用任意分隔符作为定界符
sed -n ‘/^hello/s|/bin/bash|/sbin/nologin|p‘ /etc/passwd
sed命令疑难问题
$ sed -ir ‘/^H+/a 1111‘ /etc/sysconfig/network
$ cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=yy.sxjy.com$ ls network
network networking/ networkr network-scripts/注意:-ir选项不会追加成功,会生成一个-r文件
$ sed -ri ‘/^H+/a 1111‘ /etc/sysconfig/network
$ cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=yy.sxjy.com
1111注意:-ri选项会追加成功,不会生成另一个文件 所以要将r选项放在前面
sed命令中包含变量
有变量一定要用""
sed的命令中取反操作 !
sed的命令中&的用法
&用于表示替换命令中的匹配模式
echo "i have a fat cat" |sed ‘s/.at/".at"/g‘
i have a ".at" ".at"
$ echo "i have a fat cat" |sed ‘s/.at/"&"/g‘
i have a "fat" "cat"sed -rn ‘s/\<[0-9]{3}\>/&0/gp‘ passwd 将所有3位数字后面加个0
sed的s命令中支持\t\n
sed -n ‘s/^xixi/\n 1111/p‘ passwd
sed ‘s/^abrt.*/&\n/‘ passwd
sed的命令中标签的用法
标签可以方便在后面引用,每行指令最多使用9个标签
本文出自 “爱武装一辈子” 博客,请务必保留此出处http://menglinux.blog.51cto.com/8733806/1531720