异想天开

What's the true meaning of light, Could you tell me why

sed命令

日期:2015-08-04 10:21:30
  
最后更新日期:2015-08-04 11:39:55
sed命令,stream editor。sed命令执行过程中,管理两块buffer,模式匹配时使用的buffer叫做模式空间(pattern space),需要记录的全局数据,可以通过h, H, x, g, G等标志放进全局的保持空间(hold space)。
1.sed命令选项
选项说明
-n
--quiet
--silent
这三个选项作用都是表示取消自动输入,一般默认执行完成后,会将模式空间的内容输出
-e SCRIPT
--expression=SCRIPT
指定要执行的表达式,可以多次使用
-f SCRIPT-FILE
--file=SCRIPT-FILE
含有表达式的脚本文件
-i[SUFFIX]
--in-place[=SUFFIX]
将输出重定向到一个文件,文件名是原来的文件名+SUFFIX。注意若SUFFIX为空,则会覆盖原文件

2.定址,选择sed操作的文本行
选项说明
NUMBER选择第NUMBER行
FIRST~STEP选择从FIRST开始,步长为STEP的所有行
$ 最后一行
/REGEXP/ 正则表达式匹配文本行
\%REGEXP% 正则表达式匹配文本行,与上面的区别在于正则表示式里面可以含斜杠
/REGEXP/I
\%REGEXP%I
大小写不敏感正则匹配 如:sed -n '/^b.*b/Ip' ./a.txt
two-address forms 前面两种定址的组合

3.常用命令
选项说明
q 退出
d 删除
p 打印输出模式空间
n 读取下一行到模式空间
{ COMMANDS } 多个组合命令,分号分割

4.瑞士军刀-s命令
完整语法 s/REGEXP/REPLACEMENT/FLAGS
s命令有状态信息保存,若REGEXP用‘\(要替换部分\)'表示替换部分,则REPLACEMENT可以用\N表示该替换部分。如:
[code lang="cpp"]
sed -n 's/\(fuck\)\(.*\)/\1 \2/p' ./a.txt
[/code]
&可以用来表示全部被替换部分
选项说明
\L 将替换部分变成小写,直到遇到\U,\E
\l 替换部分变成小写
\U 替换部分变成大写,直到遇到\L,\E
\u 替换部分变成大写
\E 停止对\L,\U的转换
如:
[code lang="cpp"]
sed -n 's/\(fuck\)\(.*\)/\U\1 \2/p' ./a.txt
[/code]

FLAGS选项有:
选项说明
g 全局替换
NUMBER 替换第NUMBER行
p打印替换部分
w FILE-NAME 替换部分写入文件
I,i 大小写不敏感
e 将管道内容替换后,shell里面执行,如:echo 'echo "world"' | sed -n 's/world/zhuang/ep'