27
sed A Programmer’s Perspective 李李oldratlee <at> gmail <dot>com

sed -- A programmer's perspective

Embed Size (px)

DESCRIPTION

introduction of sed

Citation preview

Page 1: sed -- A programmer's perspective

sed

A Programmer’s Perspective李鼎( oldratlee<at>gmail<dot>com)

Page 2: sed -- A programmer's perspective

What benefit or Why learn?

批处理 (sed/awk) VS 交互性 (vi) 快速大量地处理文件 可重复使用脚本 在脚本上可逐步改进

Plain Text( 平文本 ) VS Binary( 二进制格式 ) Unix VS Windows :’) (etc/passwd vs 注

册表 )

Page 3: sed -- A programmer's perspective

应用实例

更新多个 POM 文件中的工程版本 大量文件的重复操作(替换、转换等)

Page 4: sed -- A programmer's perspective

〇、大纲

1. 预备知识( glob 、正则表达式)2. sed *▪ 执行流程▪ 语法▪ 实例

3. 脚本编写实践4. 附录 & 相关资料

Page 5: sed -- A programmer's perspective

一、预备知识

Page 6: sed -- A programmer's perspective

wild-card pattern(glob) vs regex wild-card pattern(glob)

bash find --include option of grep

Regular Expression grep sed awk vi

http://en.wikipedia.org/wiki/Glob_(programming)

Page 7: sed -- A programmer's perspective

由 ed 引入,在 grep 、 sed 中可用

正则表达式—基本元字符集

元字符 用途. 任一字符。 # awk 中可以匹配换行* 匹配任意个 ( 含零个 ) 在它前面的字符[…] 字符类,第一个字符为脱字符 ^ 表示匹配^ 匹配行开始$ 匹配行结尾

\{m,n\}匹配前面字符指定的次数。\{n\} 匹配 n 次, \{n,\} 至少 n 次, \{,n\}至多 m 次

\ 转义随后的特殊字符

Page 8: sed -- A programmer's perspective

正则表达式—扩展元字符集

由 egrep 引入, awk 基本上与 egrep 相同元字符 用途

+ 匹配一个或多个在它前面的字符? 匹配零个或一个在它前面的字符| 配置前面或后面的正则(替代方案)() 正则表达式分组

{m,n}匹配前面字符指定的次数。{n} 匹配 n 次, {m,} 至少 m 次, {,n} 至多 m 次

Page 9: sed -- A programmer's perspective

二、 sed

Page 10: sed -- A programmer's perspective

行编辑器 ed

命令 p d s

地址 行号 : 1 , 59 , 200 正则表达式: /^foo[0-9]/

Page 11: sed -- A programmer's perspective

Sed 执行流程—脉动

Page 12: sed -- A programmer's perspective

Sed 执行流程——程序式描述

0 for(line : <Input File>) {1 process line by command list2 print pattern space3 clean pattern/hold space4 }

NOTE: 2 print pattern space

这一步可以用 sed –n 选项关闭

Page 13: sed -- A programmer's perspective

基本命令

p 打印 s 替换 d 删除a 追加 i 插入 c 修改= 打印行号n 下一条q 退出

Page 14: sed -- A programmer's perspective

s 命令(替换)

格式 s/reg_from/reg_to/<option>

Option 数字,如 2 表示只替换第 2 个匹配 g ,替换所有匹配,缺省只替换第一个匹配

Page 15: sed -- A programmer's perspective

替换元字符

替换元字符是 (\) 、 (&) 、 (\num) 在替换字符串中也用于包含 ( 换行符 )

1. s/●/\/2 # 用换行符替换第 2 个制表符

2. s/\.Ah */\\@A HEAD = /

3. s/$/\/

Page 16: sed -- A programmer's perspective

地址

行号地址: 120$ (最后一行)

正则地址:/regex/

范围: (闭区间)/reg_start/,/reg_end/1,/reg_end/

Page 17: sed -- A programmer's perspective

命令行

简单命令: p

地址 + 命令: 1d $s/good/bad/g /from/to/s#dog#cat#

复合命令: < 地址 >{

< 命令行 >}

Page 18: sed -- A programmer's perspective

sed 第一字符集合

1p$a/\<EOF>

/^include/d 命令: p s d a i c = n y q P D N H h G g x : b t

Page 19: sed -- A programmer's perspective

sed 实例

① 词组搜索(词组可能跨两行)② 标签替换③ Velocity 模板中 get 方法转成属性

④ 练习一个:去掉换行自动换行

Page 20: sed -- A programmer's perspective

sed 在命令行上指定多个命令

① 使用分号: sed 's/bad/good;s/dog/cat/' file

② 使用多个 e 选项sed -e ‘s/bad/good/' –e 's/dog/cat/' file

③ 使用的 Bash 的分行指令sed -e 's/bad/goods/dog/cat/' file

什么情况下, (1) 用分号做不了?

Page 21: sed -- A programmer's perspective

三、脚本实践

Page 22: sed -- A programmer's perspective

一些原则

先在典型的测试数据上测运行,对比差异然后在实际数据上运行

实用性不用用脚本完成 100% 的工作,人肉辅助。

Page 23: sed -- A programmer's perspective

附录 grep

递归查看目录下的文件 – r grep com\\.alibaba\\.dubbo --include=*.java -r .

只查看选定的文件: --include=*.java --include=*.c --include=*.{c,php}

输出上下文行 -A -B -C –NUM 只显示匹配的文件 – l 彩色显示结果 --color=auto

别名以方便使用: alias grep='grep --color=auto'

每行都马上 flush --line-buffered 避免 buffer 引起的等待

Page 24: sed -- A programmer's perspective

常用的命令

替换递归目录下文件使用 sed/awk :grep <pattern> -rl . | xargs sed -e <script>

Page 25: sed -- A programmer's perspective

附录: Windows 使用 sed

a) UnixUtils 有 Windows 下的 Porthttp://unxutils.sourceforge.net/

b) GNU Win32 ports http://sourceforge.net/projects/gnuwin32/

c) 使用 cygWin http://www.cygwin.com/

详见: 如何在 Windows 下使用 GNU 命令http://www.oldratlee.com/297/tech/unix/use-unix-command-under-windows.html

Page 26: sed -- A programmer's perspective

附录: #!(shebang)

在“ !#” 行只能有一个参数。# ( 在 Ubuntu 、 Redhat 下我有测试过 )这行由 *nix 系统内核处理,而不是由shell 处理,因此不能有任何 shell 构件。

http://zh.wikipedia.org/wiki/Shebang http://en.wikipedia.org/wiki/Shebang_(Unix)

Page 27: sed -- A programmer's perspective

相关资料

sed & awk 2nd Ed man page of ed, grep, sed, awk sed & awk Pocket Reference GNU sed 的 Manual ,实现中有很多扩展

http://www.gnu.org/software/sed/manual/html_node/index.html