- 论坛徽章:
- 2
|
sed疑问
看下这个就知道了
使用sed有两种基本方法,可直接在命令行使用:
sed [-n] [-e] ‘edit_command’ in_file
或在批处理文件中使用:
sed [-n] –f edit_script in_file
其中edit_command是属于编辑器中的一引起命令,例如1,5p及1,$s/sun/& and moon/g等命令。
edit_command命令:
1、 替换命令
语法:[address1 [,address2]]s/regexp/replacement/flags
在给定的地址范围内(address1-address2),用给定的字符replacement替换与正则表达(regexp)相匹配的字符,flags为替换方式,最通用的是g参数,flags可选参数如下:
n 为2-512之间的数,用来规定只替换regexp的第n次出现处的字符串;
g 全程替换;
p 显示进行了替换(打印)的行;
w wfile 如做了一次替换,则把该行写至wfile文件中。
示例:1,$s/aaa/bbb and &/g
表示所有编辑中的aaa由bbb and aaa替换,其中&代表”aaa”,即为语法中的regexp
其中regexp不能加引号,如是变量则要加上引号,replacement同理
不给出地址则表示所有行
sed ‘/^example/,/WED$/s/sun/moon/g’ myfile
第一个字符表示选择example为开始的行,么二个字符表示选择QED为结束行,如果这些选择发生在同一行,则仅有这一行被选中,如QED在example之前,则选择example行
2、 用叹号!做反转
反转某个命令的功能,示例如下:
sed ‘1,4!s/sun/& and moon/g’ myfile
表示,要替换myfile中的所有行但不包含前4行,空行的标记为’^$’,所以
sed ‘/^$/!s/^/ /’ myfile
表示不在空行上进行替换
3、 删除
此命令需要两个地址,并删除选定范围之内的行:
sed ‘4,5d’ myfile
表示删除文件myfile中的第4与第5行
sed ‘/sun/d’ myfile
表示删除文件myfile中含有sun的行
sed ‘/sun/!d’ myfile
表示删除文件myfile中所有不含sun的行
此操作不影响myfiles本身
sed ‘/sun/,/moon/d’ myfile
删除从第一个含有sun至第一个含有moon的行之间的所有行。
4、 增加或插入文本
可以用a或i功能增加或插入文本,增加文本必须是编辑命令中的部分,且必须注意文本是否要跨过多行。对后面的情况需要使用转义字符\,它可以隐藏最后的新行之外的所有行
sed ‘3a\Now is the hour’ myfile
将在myfile第3行之后增加Now is the hour,i命令在给定的地址之前插入。
5、 y功能
它使用1对1方式替换字符
sed ‘y/abc/ABC/’ myfile
将按a-A,b-B,c-C方式进行替换,前后两长度必须相同,否则将造成错误或混乱。
6、 p功能
输出指定行,使用-n选项将只将满足条件的行显示一次
例:sed –n ‘/sun/p’ myfile
将显示出含有sun的行
sed –n ‘/sun/!p’ myfile
将显示不含有sun的行,如果在p之前要用变量,需要使用\进行转义
a=1
sed –n ‘$a,$a\p’ myfile
将显示myfile中第一行的内容一次。
7、 n功能
用下一个函数处理下一行输入,而不是恢复到sed批命令的开头
8、 r filename功能
读取指定文件内容并附加在所选行后
9、 q功能
停止sed处理 |
|