x # x为指定行号;
x,y # 指定从x到y的行号范围;
/pattern/ # 查询包含模式的行;
/pattern/pattern/ # 查询包含两个模式的行;
/pattern/,x # 从与pattern的匹配行到x号行之间的行;
x,/pattern/ # 从x号行到与pattern的匹配行之间的行;
x,y! # 查询不包括x和y行号的行;
r # 从另一个文件中读文件;
w # 将文本写入到一个文件;
y # 变换字符;
q # 第一个模式匹配完成后退出;
l # 显示与八进制ASCII码等价的控制字符;
{} # 在定位行执行的命令组;
p # 打印匹配行;
= # 打印文件行号;
a # 在定位行号之后追加文本信息;
i # 在定位行号之前插入文本信息;
d # 删除定位行;
c # 用新文本替换定位文本;
s # 使用替换模式替换相应模式;
n # 读取下一个输入行,用下一个命令处理新的行;
N # 将当前读入行的下一行读取到当前的模式空间。
h # 将模式缓冲区的文本复制到保持缓冲区;
H # 将模式缓冲区的文本追加到保持缓冲区;
x # 互换模式缓冲区和保持缓冲区的内容;
g # 将保持缓冲区的内容复制到模式缓冲区;
G # 将保持缓冲区的内容追加到模式缓冲区。
sed工具默认处理文本,文本内容输出屏幕已经修改,但是文件内容其实没有修改
需要加-i参数即对文件彻底修改;
查看文件
1
2
3
4
5
6
7
cat -n file | sed -n "p"
# 查看file文件 并且阅读其中所有行,因p前无规则
cat -n file | sed -n "1,3p"
# 查看file文件 1-3行
sed "1p;$p" file
sed ‘1p;$p‘ file
# 查看文件第一行和最后一行
删除文件内容
1
2
3
4
5
6
sed ‘1,3d‘ file
# 删除文件第一到第三行
sed ‘$d‘ file
# 删除文件最后一行
sed -i ‘/#*/d‘ file
# 删除文件中以#号开头的行
替换文本内容
1
2
3
4
5
sed ‘s/old/new/g‘ file
sed -i ‘s/old/new/g‘ file # 加了-i那么修改会影响到原本的文件对象
# 替换file文件中的old内容为new
# s:使用替换模式替换相应模式
# g:将保持缓冲区的内容复制到模式缓冲区;
追加文本内容
1
2
3
4
sed "/###/a 123123123" file
# 在file的符合###匹配的 后面加一行123123123
sed "1,3a 123123123" file
# 在文件的1,3行追加123123123
插入文本内容
1
2
3
4
sed "/###/a 123123123" file
# 在file的符合###匹配的 前面加一行123123123
sed "1,3a 123123123" file
# 在文件的1,3行前面加123123123