Shell脚本——使用sed命令编辑文本
来源:互联网 发布:网络课程网站 编辑:程序博客网 时间:2024/06/07 04:27
1 语法格式
sed [-nefri] 'command' file(s)
2 常用选项
-n 只显示sed处理后的结果,而非全部显示
-e 对相同文件进行多项编辑
-f 执行-f后接文件中的sed操作,可直接将sed操作写在一个文件中
-r
-i 直接修改读取的文件,而非在屏幕上输出,否则只打印而不写入文件
3 常用命令
a 新增,后接的字符串在选定行的下一行插入
i 插入,后接的字符串在选定行的上一行插入
c 取代,后接的字符串替换掉选定行
d 删除,后不接字符串
p 列印,打印模板块的行,常与-n参数连用,表示只打印sed处理后的行
s 取代,替换制定字符串,常搭配正则表达式
= 打印行号
4 sed替换标记
g 行内全部替换
p 打印行
w 把行写入一个文件
r 在行后读入一个文件
& 已匹配字符串标记
\1 子串匹配标记,\2, \3, ...
5 元字符集
^ 匹配行首,如/^sed/表示匹配所有以sed为开头的行
$ 匹配行尾,如/sed$/表示匹配所有以sed为结尾的行
. 匹配一个非换行符的任意字符,如/s.d/表示匹配s后接任一字符且最后是d的行
* 匹配0个或多个字符,如/*sed/表示匹配以sed为结尾的行
[] 匹配指定范围内的一个字符,如/[sS]ed/表示匹配sed或Sed的行
[^] 匹配不在指定范围内的一个字符,如/[^A-RT-Z]ed/表示匹配不包含A-R和T-Z的一个字符开头,紧跟ed的行
& 保存搜索字符、替换其他字符,如s/love/**&**/表示love编程**love**
\< 匹配单词的开头
\> 匹配单词的末尾
x\{m\} 重复字符x、m次
x\{m,\} 重读字符x至少m次
x\{m,n\} 重复字符x至少m次、至多n次
6 例子
(1)定址
用于确定对哪些进行编辑;
地址形式可以是数字、正则表达式或两者的结合;
若没有指定行,sed处理输入文件的所有行;
x 行号
x,y 行号范围从x到y
/pattern/ 查询包含模式的行
# 打印包含my的行到包含your的行之间的行sed -n '/my/,/your/p' file# 打印第二行到最后一行之间的行sed -n '2,$p' file# 打印包含$的所有行sed -n '/\$/p' file
(2)替换一行中某部分s
# 替换第一个ruby为birdsed -i 's/ruby/bird/' file# 全面替换ruby为birdsed -i 's/ruby/bird/g' file# 替换2个或多个空格为1个空格sed -i 's/[ ][ ]*/ /g' file# 从第2个匹配处开始替换ruby为birdsed -i 's/ruby/bird/2g' file# 在每行行首添加HEADsed -i 's/^/HEAD&/g' file# 在每行行尾添加TAILsed -i 's/$/&TAIL/g' file
(3)替换一行或多行c\
# 替换第一、二行为HIsed -i '1,2c HI' file
(4)定界符/
根据需要使用定界符,推荐一直使用,更清晰;
通常使用"/"作为定界符,也可使用任意定界符;
若定界符出现在样式中,需转义;
# 全面替换\bin为\usr\local\binsed 's/\/bin/\/usr\/local\/bin/g' file
(5)删除
# 删除空白行sed '/^$/d' file# 删除所有以test为开头的行sed '/^test/d' file
(6)引用
sed表达式可使用单双引号来引用,但若表达式包含变量,只能使用双引号;
test=hellosed "s/${test}/HELLO/" file
(7)选定行的范围,
# 模板test和west之间的行,每行末尾使用字符串aa bb替换sed '/test/,/west/s/$/aa bb/' file
(8)多点编译
sed -e "1,5d" -e "s/test/check/" file
(9)从文件读入r
# 读取file内容,显示在与test相匹配行的下一行,若匹配多行,file内容显示在所有匹配行的下一行sed '/test/r file' filename
(10)写入文件w
# 在filename中所有包含test的行被写入file中,以覆盖的形式sed -n '/test/w file' filename
(11)追加(行下)a
# 多行追加到以test为开头的行后面sed -i '/^test/a this is a test line\nthis is a test line' file# 在test.conf文件的第2行之后插入this is a test linesed -i "2a this is a test line" test.conf# 在文件最后一行后追加一行数据byesed -i '$a bye' file# ORsed -i "\$a bye" file
(12)追加(行上)i
# 将this is a test line追加到以test为开头的行前面sed -i '/^test/i this is a test line' file# 在test.conf文件第5行之前插入this is a test linesed -i '5i this is a test line' test.conf
(13)匹配单词
# 匹配包含以wo为开头的单词所在的行sed -n '/\<wp/p' file# 匹配包含以ld为结尾的单词所在的行sed -n '/ld\>/p' file
(14)匹配连续字符的行
# 匹配包含连续3个b的行sed -n '/b\{3\}/p' file# 匹配至少包含连续1个c的行sed -n '/c\{1,\}/p' file# 匹配包含2到4个d的行sed -n '/d\{2,4\}/p' file
(15)已匹配字符串标记&
# 所有以192.168.0.1为开头的行替换成它自己加上localhostsed -n 's/^192.168.0.1/&localhost/p' file# 在export PATH=之后添加:$PYTHON_HOME/lib(相当于在指定行某位置插入数据!)sed -i "s/export PATH=/&\$PYTHON_HOME\/lib:/g" file
(16)子串匹配标记\1
# 所有loveable替换成lovers,并打印sed -n 's/\(love\)able/\1rs/gp' file# 两个子串互换位置echo aaa BBB | sed -n 's/\([a-z]\+\) \([A-Z]\+\)/\2 \1/'
(17)在最后一个</bean>前添加<bean>
# 首先获取最后一个</bean>所在行号line=sed -n '/</bean>/=' file | tail -n 1# 在该行最前面添加<bean>sed -i '${line}s/.*/<bean>&/' file
- Shell脚本——使用sed命令编辑文本
- shell脚本编程:sed命令编辑文本
- sed 命令编辑文本
- Linux Shell 脚本编程(9)—文本过滤(sed命令)
- shell脚本的sed命令使用小结
- sed命令--shell脚本
- Shell脚本:1、文本处理的sed命令
- Shell—sed命令
- shell脚本——sed
- Linux Shell脚本攻略:sed文本替换
- SHELL:awk,sed,常用文本处理命令
- LINUX命令文本处理——sed
- shell sed命令使用心得
- shell脚本学习-5(sed命令学习)
- shell脚本学习-6(sed命令学习)
- shell脚本学习-7(sed命令学习)
- shell脚本学习-8(sed命令学习)
- linux-shell脚本命令之sed
- 启动/关闭oracle服务有三种方式
- 10句洗脑屁话
- 欧姆龙PLC接线时怎样区别输入输出点
- SQL Server 锁
- ESB开发WebService接口
- Shell脚本——使用sed命令编辑文本
- 排序算法:快速排序
- WebRtc中的消息机制
- Java随机函数
- df -h
- 2017年5月12日,周结(十二),android第一行代码总结
- centos用yum安装jdk
- Problem A: 还会用继承吗?
- 自动生成路径mesh