sed 是一种流编辑器,它一次处理一行内容。处理时把当前处理的行存储在临时缓冲区中,接着sed命令处理缓冲区中的内容,处理完成后把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容没有改变,除非你使用重定向输出语句。
语法:
sed [ 参数 ] "命令" 文件名
参数:
- -n:一般 sed 命令会把所有数据都输出到屏幕上。如果加入此选项,则只会把经过 sed 命令处理的行输出到屏幕上;
- -e: 允许对输入数据应用多条 sed 命令编辑;
- -f 脚本文件名:从 sed 脚本中读入 sed 操作。
- -r:在 sed 中支持扩展正则表达式;
- -i:用 sed 的修改结果直接修改读取数据的文件,而不是由屏幕输出动作;
命令:
- a :追加,在当前行后添加一行或多行。当添加多行时,除最后一行外,每行末尾需要用“\”代表数据未完结;
- c :行替换,用c后面的字符串替换原数据行。当替换多行时,除最后一行外,每行末尾需用“\”代表数据未完结;
- i :插入,在当前行前插入一行或多行。当插入多行时,除最后一行外,每行末尾需要用“\”代表数据未完结;
- d:删除,删除指定的行;
- P:打印,输出指定的行;
- s:字符串替换,用一个字符串替换另一个字符串。格式为“行范围s/旧字串/新字串/g”;
示例如下:
准备一个测试文件,文件内容如下:
测试1 1 11
测试2 2 22
测试3 3 33
测试命令
- 追加(a)
- 插入(i)
sed "2a 测试" sed.txt
sed "2i 测试" sed.txt
这里可以看到 a 与 i 的区别,一个是在指定行之后追加写入,一个是在指定行直接插入。
- 行替换(c)
- 字符串替换(s)
sed "s/测试/实操/g" sed.txt
sed "2c 测试" sed.txt
- 多条命令(-e)
sed -e "3a 测试4" -e "2c 替换" sed.txt
- 写入文件(-i)
sed -i "3a 测试4 4 44" sed.txt
cat sed.txt
- 输出指定行 (P)
- 选择输出(-n)
sed "2P" -n sed.txt
这里可以看到如果只输入 P 命令的话会把选中行和所有行都输出,加上 -n 命令之后则只输出选中的那一行