sed是一个非交互式文本编辑器,它可对文本文件和标准输入进行编辑
sed 适用于如下三种场合:
编辑相对交互式文本编辑器而言太大的文件
编辑命令太复杂,在交互式文本编辑器中难以输入的状况
对文本扫描一遍,可是须要执行多个编辑函数的状况
sed只对缓冲区中原始文件的副本进行编辑,并不编辑原始的文件,所以若是须要保存改动的内容,须要将输出重定向到另外一个文件bash
sed命令选项及其意义
-n --不打印全部的行到标准输出
-e --表示将下一个字符串解析为sed编辑命令,若是只传递一个编辑命令给sed,-e能够省略
-f --表示正在调用sed脚本文件app
sed命令选项的一组例子:
将第一行内容打印出来
sed -n '1p' dwa_m_excel_dura_aggr_prop.log
将第一行取出来,并重定向到dim_ia_test.log文件中
sed -n '1p' dwa_m_excel_dura_aggr_prop.log > dim_ia_test.log
将第3~6行内容打印出来
sed -n '3,6p' dwa_m_excel_dura_aggr_prop.log
将包含application的行打印出来(这里大小写是敏感的)
sed -n '/application/p' dwa_m_excel_dura_aggr_prop.log
将包含application的行号打印出来(这里大小写是敏感的)
sed -n '/application/=' dwa_m_excel_dura_aggr_prop.log
将包含application的行号和行内容打印出来(这里大小写是敏感的),当多个编辑命令同时实现时,加-e
sed -n -e '/application/=' -e '/application/p' dwa_m_excel_dura_aggr_prop.log
sed追加文本,在instead.后面追加we append a new line.内容
sed '/instead./a\we append a new line.' dim_ia_test.log编辑器
sed追加文本,使用-f : cat append.sed函数
#!/bin/sed -f #instead.为要查找的内容,a\表示此处换行添加文本 /instead./a\ we append a new line.\ we append another line.
为脚本赋可执行权限 chmod u+x append.sedthis
运行脚本:spa
./append.sed dim_ia_test.logexcel
在a\为在定位行号以后插入文本信息blog
运行结果为:字符串
sed文本定位的一组例子io
将含有.的行打印出来,'.'为元字符,须要转义
sed -n '/\./p' dim_ia_test.log
将最后一行打印出来
sed -n '$p' dim_ia_test.log
等价
sed -n '$'p dim_ia_test.log
将以ing结尾的行打印出来
sed -n '/.*ing/p' dim_ia_test.log
2~10行不打印,其余行打印出来
sed -n '2,10!p' dim_ia_test.log
将含有HIVE_CONF_DIR的行到最后一行的行内容打印出来
sed -n '/HIVE_CONF_DIR/,$p' dim_ia_test.log
将第三行到含有HIVE_CONF_DIR的行的内容打印出来
sed -n '3,/HIVE_CONF_DIR/p' dim_ia_test.log
sed基本编辑命令的一组例子
1、sed插入文本,使用i\
cat insert.sed
#!/bin/sed -f /instead./i\ We insert a new line.
为脚本赋可执行权限 chmod u+x insert.sed
运行该脚本
./insert.sed dim_ia_test.log
在i\为在定位行号以前插入文本信息
2、sed修改文本用c\
cat modify.sed
#!/bin/sed -f /instead./c\ We modify this line.
为脚本赋可执行权限 chmod u+x modify.sed
运行该脚本:
./modify.sed dim_ia_test.log
运行结果:
3、sed删除文本,不区分大小写
cat delete.sed
#!/bin/sed -f /[Ii][Nn][Ss][Tt][Ee][Aa][Dd]/d
脚本赋可执行权限 chmod u+x delete.sed
运行该脚本:
运行结果将instead所在的行删除;
删除第一行文本
sed '1d' dim_ia_test.log
删除最后一行文本
sed '$d' dim_ia_test.log
删除第一行到第十行的内容
sed '1,10d' dim_ia_test.log
删除第5行到最后一行的内容
sed '5,$d' dim_ia_test.log
替换文本
g --表示替换文本中全部出现被替换字符串之处
p --与-n选项结合,只打印替换行
w 文件 --表示将输出定向到一个文件
将instead替换为xxxxx,并打印所有
sed 's/instead/xxxxx/' dim_ia_test.log
只打印替换的行(此时已替换)
sed -n 's/instead/xxxxx/p' dim_ia_test.log
替换全部出现被替换的字符串
sed -n 's/number/xxxxx/pg' dim_ia_test.log
将只打印的替换行写入output文件
sed -n 's/number/xxxxx/w output' dim_ia_test.log
将文件中出现的number用()括起来,并打印
sed -n 's/number/(&)/pg' dim_ia_test.log
等价
sed -n 's/number/(number)/pg' dim_ia_test.log
写入一个新文件
将1~5行写入output文件中
sed -n '1,5 w output' dim_ia_test.log
将含有number关键字的行写入output文件中
sed -n '/number/w output' dim_ia_test.log
查找含有instead的行,将output文件的内容插入到instead行下面
sed '/instead/r output' dim_ia_test.log
退出命令
打印前5行,而后退出
sed '5 q' dim_ia_test.log
打印从第一行到含有number的行,并退出
sed '/number/q' dim_ia_test.log
在定位行执行命令组将含有number的行内容和行号打印出来sed -n '/number/{p;=}' dim_ia_test.log