sed 对字符的处理
p 模式——显示
d 模式——删除
a 模式——添加
c 模式——替换
w 模式——写入
i 模式——插入
p 模式
sed -n '/^#/p' fstab
显示以 # 号开头的行
sed -n '/^#/!p' fstab
显示不以 # 号开头的行
sed -n '/0$/!p' fstab
显示不以 0 结尾的行
cat -n fstab | sed -n '2,6p'
显示 2-6 行
cat -n fstab | sed -n -e '2p' -e '6p'
与cat -n fstab | sed -n -e '2p;6p'
显示第2、第6行
cat -n fstab | sed -n -e '2!p'
显示除了第2行的其他行
cat -n fstab | sed -n -e '2,6!p'
不显示 2-6 行
cat -n fstab | sed -ne '2!p;6!p' | uniq -d
显示除了第2、第6行的其他行
d 模式
cat -n fstab | sed -e '2d;6d'
删除第2、第6行后再显示
cat -n fstab | sed -e '2,6d'
删除第 2-6 行后再显示
sed -e '/^#/d' fstab
删除以 # 号开头的行后再显示
sed -e '/^$/d' fstab
删除空行后再显示
sed -e '/^$/d;/^#/d' fstab
删除空行和以 # 号开头的行后再显示
sed -e '/UUID/!d' fstab
< == >sed -e '/^UUID/!d' fstab
除了含有 UUID 的行(以UUID开头的行)不删除,其余的删除后再显示
sed -e '/UUID/d' fstab
删除含有 UUID 的行后再显示
a 模式
sed '/hello/aworld' westos
添加 world 到文件 westos(默认添加到最后行)
sed 's/hello/hello world/g' westos
全局替换,将 hello 替换成 hello world
sed '/hello/a\world' westos
等价于sed '/hello/aworld' westos
sed '/hello/aworld westos' westos
添加 hello world 到文件 westos
sed '/hello/aworld\nwestos' westos
添加 world westos 到文件 westos ,world 后有换行符,所以 westos 换行显示
sed '/hello/aworld\n westos' westos
world 后有换行符且有一空格,所以 westos 换行并空格显示
c 模式
sed '/hello/chello world' westos
将文件 westos 中的 hello 替换成 hello world
sed '/hello/ci\nlike\nyou' westos
将文件 westos 中的 hello 替换成 i like you 并换行显示
w 模式
sed -n '/bash$/p' passwd > file
等价与sed -n '/bash$/wfile1' passwd
此处只为看效果,用 file 和 file1 演示
sed '/hello/=' westos
sed '/hello/=' -i westos
参数 -i :直接修改读取的文件内容,而不是输出到终端。
演示将内容一行显示
sed '6r westos' fstab
在文件 fstab 的第6行后添加上文件 westos 的内容后显示
sed '$r westos' fstab
在文件 fstab 的最后一行后添加上文件 westos 的内容后显示
sed '1r westos' fstab
在文件 fstab 的第1行后添加上文件 westos 的内容后显示
sed -n '/^UUID/=' fstab
sed '/^UUID/=' fstab
- sed 的其他用法
此处只演示sed -f filename1 filename2
,其余可自己测试
- sed 的其他用法
sed -f filename1 filename2
sed -n -e '/^UUID/p' -e '/^UUID/=' filename
sed -e 's/sbin/linux/;s/bash/westos/' filename
sed 's/^\//#/' filename
sed 's@^/@#@g' filename
sed 's/\//#/' filename
sed 's/\//#/g/' filename
sed 'G' filename
sed '$!G' filename
sed '=' filename | sed 'N;s/\n/ /'
sed -n '$p' filename