码迷,mamicode.com
首页 > 系统相关 > 详细

shell中sed的使用

时间:2014-11-29 13:21:46      阅读:412      评论:0      收藏:0      [点我收藏+]

标签:shell   sed   linux   

1.在命令行定义编辑器命令
命令格式 sed options script file
bubuko.com,布布扣
bubuko.com,布布扣
sed不会修改文本文件的数据,他只会将修改后的数据发送到STDOUT。
2.在命令行上使用多个编辑器命令
bubuko.com,布布扣
bubuko.com,布布扣
将命令放在一个文件中
bubuko.com,布布扣
bubuko.com,布布扣
3.s命令使用替换标记
.数字代表新文本将替换第几处模式匹配的地方
.g,替换所有的
。p,原来的内容打印出来
。w file,将替换的结果写到文件。
-n命令禁止打印模式空间,-n和p一起使用只打印替换的行。
bubuko.com,布布扣
bubuko.com,布布扣
4.使用地址
4.1指定行
sed ‘2s/dog/cat/‘ data1
sed ‘2,3s/dog/cat/‘ data1
sed ‘2,$s/dog/cat/‘ data1
4.2匹配文本模式
sed ‘/farsight/s/bash/csh/‘ /etc/passwd
4.3组合命令
bubuko.com,布布扣
bubuko.com,布布扣
5.删除行
sed ‘d‘ data1 全部删除
sed ‘3d‘ data1 删除第三行
sed ‘2,3d‘ data1 删除2-3行
sed ‘/quick/d‘ data1 删除匹配到quick的行
删除两个模式之间的行。
sed ‘/1/,/3/d‘ data1 删除匹配到1至匹配到3的行
6.插入和附加文本
sed ‘3i\
>this is a inserted line.‘ data1 插入3行前面
sed ‘3a\
>this is a inserted line.‘ data1 放在第3行后面
sed ‘$a\
>this is a inserted line.‘ data1 放在最后一行后面
插入多行
bubuko.com,布布扣
bubuko.com,布布扣
7.修改行
sed ‘3c\
>this is a changed line.‘ data1 将第3行修改为
sed ‘/number1/c\
>this is a changed line.‘ data1 修改匹配的行
sed ‘2,3c\
>this is a changed line.‘ data1 修改2至3行
8.打印p
sed -n ‘2,3p‘ data1 打印2至3行
sed -n ‘/3/{
>p
>s/line/test/p
>}‘ data1 打印第三行,和匹配line后替换的行。
打印行号
sed ‘=‘ data1
bubuko.com,布布扣
bubuko.com,布布扣
打印匹配行的行号
bubuko.com,布布扣
bubuko.com,布布扣
9.和文件一起工作
写入文件
sed ‘1,2w test‘ data1 data1的1至2行写入test
从文件中读取数据
将data3中的数据放在data2的第2行后面
bubuko.com,布布扣
bubuko.com,布布扣
sed ‘$r data3‘ data2 将data3中的数据放在data2的最后面
sed ‘/line1/r data3‘ data2 读取data3放在data2中匹配line1的后面
炫技时刻:
在匹配到tag后写入文件data3的内容,然后删除tag
bubuko.com,布布扣
------------------------------------------------
sed进阶
1.
n:读取下一行到模式空间
N:附加下一行到模式空间
P:Print up to the first embedded newline of the current pattern space.
D:Delete up to the first embedded newline in the pattern space. Start next cycle, but skip reading from the input if  there is still data in the pattern space.
bubuko.com,布布扣
bubuko.com,布布扣
2.模式空间与保持空间
h
将模式空间复制到保持空间
H
将模式空间附加到保持空间
g
将保持空间复制到模式空间
G
将保持空间附加到模式空间
x
交换模式空间与保持空间的内容
翻转一个文件,利用模式空间和保持空间翻转文件。
bubuko.com,布布扣
bubuko.com,布布扣
排除命令!:打印不匹配的行
bubuko.com,布布扣
bubuko.com,布布扣
3.改变流
跳转命令
b [lable]
不加lable时跳转到脚本末尾,加了lable跳转到对应的lable。
也可以跳到前面的标签
测试
t [lable]
当前一条命令成立时才跳转。
4.模式替换
4.1and(&)符号
&代表前面匹配到的东西。
bubuko.com,布布扣
bubuko.com,布布扣
4.2替换单独的单词
当匹配到name is的时候,只提取出name,\1代表第一个圆括号里面的内容。
bubuko.com,布布扣
5.在脚本中使用sed
将sed命令封装在脚本中。
bubuko.com,布布扣
bubuko.com,布布扣
重定向sed的输出,使用``将sed的输出赋值给变量。
6.创建sed实用脚本
6.1加倍行间距
利用保持空间默认值。
bubuko.com,布布扣
bubuko.com,布布扣
对含有多个空白行的加倍行间距,思路是先删除所有的空白行,在加入空白行。
bubuko.com,布布扣
bubuko.com,布布扣
6.2给文件中的行编号
bubuko.com,布布扣
bubuko.com,布布扣
6.3打印末尾行
使用滑动窗口显示最后几行。
$q遇到最后一样就退出,N读取下一行到模式空间,11,$D从第11行到最后一行都要删除模式空间的第一行。所以窗口大小为10行。
bubuko.com,布布扣
6.4删除连续的空白行
bubuko.com,布布扣
bubuko.com,布布扣
创建一个任意字符开始,到空白行的区间结束的区间。
6.5删除开头的空白行
bubuko.com,布布扣
bubuko.com,布布扣
创建一个任意字符到结尾行的区间。
6.6删除末尾的行
收集所有末尾的空白行删除。
bubuko.com,布布扣bubuko.com,布布扣

bubuko.com,布布扣


shell中sed的使用

标签:shell   sed   linux   

原文地址:http://blog.csdn.net/it_liuwei/article/details/41594141

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!