sed 行编辑器
用法:
sed [选项]... 'script' inputfile
其中script是脚本基于sed语法的脚本 inputfile文件内容
常用选项
-n :不输出模式空间内容到屏幕,即不自动打印
-e :多点编辑
-f : /PATH/SCRIPT_FILE:从指定文件中读取编辑脚本
-r :支持扩展正则表达式
-i .bak :备份文件并原处编辑
把原文件做一个带.bak的备份文件 然后就不怕对原文件修改出错了
script : 脚本包括两部分 1 地址 2 命令
‘地址命令’
地址定界
1不给地址 : 对全文处理
2单地址
#:指定的行, 第#行 $:最后一行
/pattern/: 被此处模式所匹配的行 模式就是关键字 词 等
默认sed使用基本正则 /基本正则/
3地址范围:
#,# 从第#行 到 第#行
#, +# 从第n行 到 第n+m行
/pat1/,/pat2/ 从匹配模式1的行 到 匹配模式2的行
#,/pat1/ 从第#行 到 匹配模式1 的行结束
4~ :步进
1~2 奇数行
2~2 偶数行
编辑命令
d:删除模式空间匹配的行,并立即启用下一轮循环
p :打印当前模式空间的内容,追加到默认输出之后
#sed ‘2p’ 文件 会打印两遍第二行 如果只想打印第二行可以
#sed -n ’2p‘ 文件
a [\]text :在指定行后面追加文本
支持使用\n实现多行追加
i [\]text : 在行前面插入文本
#sed '2,5i\ ===' f1
c [\] texr: 替换行为单行或多行文本
w /path/somefile :保存模式匹配的行至指定文件
把符合条件的行存到文件里
r /path/somefile :读取指定文件的文本至模式空间中匹配到的行后
=:为模式空间中的行打印行号 只显示行号
!:模式空间中匹配 行取反处理
示例
sed '2p' /etc/passwd 显示第二行 但是会默认全打印所以有两个第二行
sed -n '2p' /etc/passwd 与上一条相反 只显示第二行
sed -n '1,4p' /etc/passwd 只打印第一行到第四行
sed -n '/root/p' /etc/passwd 打印包含root的行
sed -n '2,/root/p' /etc/passwd 从2行开始 到含有root的行
sed -n '/^$/=' file 显示空行行号
sed -n -e '/^$/p' -e '/^$/=' file 空行显示行号并把行也打印出来
sed '/root/a\superman' /etc/passwd 行后 在包含root的行后 打印字符串superman
sed '/root/i\superman' /etc/passwd 行前 行前
sed '/root/c\superman' /etc/passwd 代替行
sed '/^$/d' file 删除空行
sed '1,10d' file 删除1到10行
nl /etc/passwd |sed '2,5d' 删除第2行到第5行
nl /etc/passwd | sed '2a tea' 在第2行后面追加单词 tea 或字符 tea
sed 's/test/mytest/g' example 搜索 test 替代 mytest
sed -n 's/root/&superman/p' /etc/passwd 单词后 搜索 root 替代rootsuperman &相当于 表示前面的root
sed -n 's/root/superman&/p' /etc/passwd 单词前
sed -e 's/dog/cat/' -e 's/hi/lo/' pets 多点替换
sed -i.bak 's/dog/cat/g' pets 把文件改了