本文用于指导SED操作用于处理文本文件,方便自己以后快速查找定位。
SED编辑器全称为流编辑器(stream editor),其主要特点为其只需对数据流进行一遍处理就可以完成编辑操作,速度比一般交互式编辑器要快很多。其命令格式如下:
# 选项有-e,-f,-n(不产生命令输出,使用print输出)
sed options script file
# 执行多个命令,需要用-e
sed -e 's/brown/green/; s/dog/cat/' my_file
# 读取文件进行操作,需要用-f
sed -f script1.sed my_file
其常用的各式各样的命令和格式
- 替换标记 - s
# 替换默认情况下只替换每行中出现的第一处
sed 's/test/trial/' my_file
# 使用替换标记可以达到不同的效果
## 数字为指定出现的第几个
sed 's/test/trial/2' my_file
## g 表明将替换所有匹配文本
sed 's/test/trial/g' my_file
## p 表明打印原先行的内容
sed -n 's/test/trial/p' my_file
## w 将替换结果写到文件中
sed -n 's/test/trial/w new_file' my_file
- 定位哪一行进行修改
# 使用数字进行定位
## 单个行号定位
sed '2s/dog/cat/' my_file
## 多个行号定位
sed '2,3s/dog/cat/' my_file
## 从某行开始所有
sed '2,$s/dog/cat/' my_file
# 使用文本模式(支持正则)
sed '/pattern/s/bash/csh' my_file
# 命令多的话,可以多行组合
sed '3,${
s/brown/green/
s/lazy/active/
}' my_file
- 删除行
# 与上述定位方式相类似
sed '2,3d' my_file
# 需特别注意,sed只要匹配到了开始模式,删除功能就会开启
sed '/1/,/3/d' my_file
- 插入和附加文本
# 使用插入命令,文本会在流数据前面
echo "Test Line 2" | sed 'i\Test Line 1'
sed '3i/This is new linw' my_file
# 当使用附加命令时,文本会在数据流后面
echo "Test Line 2" | sed 'a\Test Line 1'
- 修改行
# 依然可以用上述的定位方式
sed '3c/This is a changed line of text.' my_file
# 文本匹配的话会修改全部匹配到的
sed '/number 3/c/This is a changed line of text.' my_file
- 回顾打印
# 文本匹配最好用
sed -n '/number 3/p' my_file
# 打印某些行
sed -n '2,3p' my_file
# 打印行号
sed -n '2,3=p' my_file