SlideShare ist ein Scribd-Unternehmen logo
1 von 27
A Programmer’s Perspective
李鼎(oldratlee<at>gmail<dot>com)
   批处理(sed/awk) VS 交互性(vi)
     快速大量地处理文件
     可重复使用脚本
     在脚本上可逐步改进
   Plain Text(平文本) VS Binary(二进制格式)
     Unix VS Windows :’) (etc/passwd vs 注册表)
   更新多个POM文件中的工程版本
   大量文件的重复操作(替换、转换等)
1.       预备知识(glob、正则表达式)
2.       sed *
     ▪   执行流程
     ▪   语法
     ▪   实例
3.       脚本编写实践
4.       附录 & 相关资料
   wild-card pattern(glob)
     bash
     find
     --include option of grep
   Regular Expression
       grep
       sed
       awk
       vi
   http://en.wikipedia.org/wiki/Glob_(programming)
   由ed引入,在grep、sed中可用
    元字符                      用途
       .      任一字符。 # awk中可以匹配换行
       *      匹配任意个(含零个)在它前面的字符
      […]     字符类,第一个字符为脱字符^表示匹配
       ^      匹配行开始
       $      匹配行结尾
              匹配前面字符指定的次数。
    {m,n}
              {n}匹配n次,{n,}至少n次,{,n}至多m次
             转义随后的特殊字符
   由egrep引入,awk基本上与egrep相同
    元字符                  用途
      +     匹配一个或多个在它前面的字符
      ?     匹配零个或一个在它前面的字符
      |     配置前面或后面的正则(替代方案)
     ()     正则表达式分组
            匹配前面字符指定的次数。
    {m,n}
            {n}匹配n次,{m,}至少m次,{,n}至多m次
   命令
     p
     d
    s
   地址
     行号 : 1 ,59, 200
     正则表达式: /^foo[0-9]/
0 for(line : <Input File>) {
1    process line by command list
2    print pattern space
3    clean pattern/hold space
4 }

NOTE:
 2 print pattern space
  这一步可以用sed –n选项关闭
   p   打印
   s   替换
   d   删除
   a   追加 i 插入 c 修改
   =   打印行号
   n   下一条
   q   退出
   格式
     s/reg_from/reg_to/<option>
   Option
     数字,如2 表示只替换第2个匹配
     g,替换所有匹配,缺省只替换第一个匹配
   替换元字符是()、(&)、(num)
   在替换字符串中也用于包含(换行符)
    1. s/●/
       /2 #用换行符替换第2 个制表符
    2. s/.Ah */
       
       @A HEAD = /
    3. s/$/
       /
   行号地址:
     1
     20
     $ (最后一行)
   正则地址:
     /regex/
   范围: (闭区间)
     /reg_start/,/reg_end/
     1,/reg_end/
   简单命令:
    p
   地址+命令:
     1d
     $s/good/bad/g
     /from/to/s#dog#cat#
   复合命令:
     <地址>{
       <命令行>
      }
   1p
   $a/
    <EOF>
   /^include/d
   命令:p s d a i c = n y q
     P D N H h G g x
     : b t
①   词组搜索(词组可能跨两行)
②   标签替换
③   Velocity模板中get方法转成属性

④   练习一个:
    去掉换行自动换行
①   使用分号:
    sed 's/bad/good;s/dog/cat/' file
②   使用多个e选项
    sed -e ‘s/bad/good/' –e 's/dog/cat/' file
③   使用的Bash的分行指令
    sed -e 's/bad/good
    s/dog/cat/' file
   先在典型的测试数据上测运行,对比差异
    然后在实际数据上运行
   实用性
    不用用脚本完成100%的工作,人肉辅助。
   递归查看目录下的文件 –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引起的等待
   替换递归目录下文件使用sed/awk:
    grep <pattern> -rl . | xargs sed -e <script>
a) UnixUtils有Windows下的Port
   http://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
   在“!#”行只能有一个参数。
    # (在Ubuntu、Redhat下我有测试过)
    这行由*nix系统内核处理,而不是由shell处
    理,因此不能有任何shell构件。
   http://zh.wikipedia.org/wiki/Shebang
    http://en.wikipedia.org/wiki/Shebang_(Unix)
   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

Weitere ähnliche Inhalte

Was ist angesagt?

Bash shell script 教學
Bash shell script 教學Bash shell script 教學
Bash shell script 教學Ming-Sian Lin
 
系統程式 -- 第 8 章 編譯器
系統程式 -- 第 8 章 編譯器系統程式 -- 第 8 章 編譯器
系統程式 -- 第 8 章 編譯器鍾誠 陳鍾誠
 
Ptyhon 教學 003 函數
Ptyhon 教學 003 函數Ptyhon 教學 003 函數
Ptyhon 教學 003 函數信宏 陳
 
竞赛中C++语言拾遗
竞赛中C++语言拾遗竞赛中C++语言拾遗
竞赛中C++语言拾遗乐群 陈
 
JavaScript Regular Expressions
JavaScript Regular ExpressionsJavaScript Regular Expressions
JavaScript Regular Expressions346682530
 
Python speed up with numba
Python speed up with numbaPython speed up with numba
Python speed up with numbaJiang Wu
 
系統程式 -- 第 7 章 高階語言
系統程式 -- 第 7 章 高階語言系統程式 -- 第 7 章 高階語言
系統程式 -- 第 7 章 高階語言鍾誠 陳鍾誠
 
Golangintro
GolangintroGolangintro
Golangintro理 傅
 
Vim get start_1.0
Vim get start_1.0Vim get start_1.0
Vim get start_1.0longhao
 
C python 原始碼解析 投影片
C python 原始碼解析 投影片C python 原始碼解析 投影片
C python 原始碼解析 投影片kao kuo-tung
 
Intro to C++ Basic
Intro to C++ BasicIntro to C++ Basic
Intro to C++ BasicShih Chi Lin
 

Was ist angesagt? (18)

Bash shell script 教學
Bash shell script 教學Bash shell script 教學
Bash shell script 教學
 
Vim
VimVim
Vim
 
系統程式 -- 第 8 章 編譯器
系統程式 -- 第 8 章 編譯器系統程式 -- 第 8 章 編譯器
系統程式 -- 第 8 章 編譯器
 
Ptyhon 教學 003 函數
Ptyhon 教學 003 函數Ptyhon 教學 003 函數
Ptyhon 教學 003 函數
 
竞赛中C++语言拾遗
竞赛中C++语言拾遗竞赛中C++语言拾遗
竞赛中C++语言拾遗
 
系統程式 -- 第 3 章
系統程式 -- 第 3 章系統程式 -- 第 3 章
系統程式 -- 第 3 章
 
JavaScript Regular Expressions
JavaScript Regular ExpressionsJavaScript Regular Expressions
JavaScript Regular Expressions
 
Python speed up with numba
Python speed up with numbaPython speed up with numba
Python speed up with numba
 
系統程式 -- 第 7 章 高階語言
系統程式 -- 第 7 章 高階語言系統程式 -- 第 7 章 高階語言
系統程式 -- 第 7 章 高階語言
 
Golangintro
GolangintroGolangintro
Golangintro
 
Vim get start_1.0
Vim get start_1.0Vim get start_1.0
Vim get start_1.0
 
Hi Haskell
Hi HaskellHi Haskell
Hi Haskell
 
Wasm text
Wasm textWasm text
Wasm text
 
C python 原始碼解析 投影片
C python 原始碼解析 投影片C python 原始碼解析 投影片
C python 原始碼解析 投影片
 
Appendix B 教學
Appendix B 教學Appendix B 教學
Appendix B 教學
 
Ch6 函式
Ch6 函式Ch6 函式
Ch6 函式
 
Intro to C++ Basic
Intro to C++ BasicIntro to C++ Basic
Intro to C++ Basic
 
Python Basic
Python  BasicPython  Basic
Python Basic
 

Andere mochten auch

Learning sed and awk
Learning sed and awkLearning sed and awk
Learning sed and awkYogesh Sawant
 
Unix command-line tools
Unix command-line toolsUnix command-line tools
Unix command-line toolsEric Wilson
 
Sed & awk the dynamic duo
Sed & awk   the dynamic duoSed & awk   the dynamic duo
Sed & awk the dynamic duoJoshua Thijssen
 
Awk Unix Utility Explained
Awk Unix Utility ExplainedAwk Unix Utility Explained
Awk Unix Utility ExplainedPeter Krumins
 
Testingtechniques And Strategy
Testingtechniques And StrategyTestingtechniques And Strategy
Testingtechniques And Strategynazeer pasha
 
Linux 101 Exploring Linux OS
Linux 101 Exploring Linux OSLinux 101 Exploring Linux OS
Linux 101 Exploring Linux OSRodel Barcenas
 
unix crontab basics
unix crontab basicsunix crontab basics
unix crontab basicssaratsandhya
 
Presentation of awk
Presentation of awkPresentation of awk
Presentation of awkyogesh4589
 
Sed Unix Utility Explained
Sed Unix Utility ExplainedSed Unix Utility Explained
Sed Unix Utility ExplainedPeter Krumins
 
Linux fundamental - Chap 15 Job Scheduling
Linux fundamental - Chap 15 Job SchedulingLinux fundamental - Chap 15 Job Scheduling
Linux fundamental - Chap 15 Job SchedulingKenny (netman)
 

Andere mochten auch (20)

Learning sed and awk
Learning sed and awkLearning sed and awk
Learning sed and awk
 
Unix command-line tools
Unix command-line toolsUnix command-line tools
Unix command-line tools
 
Sed & awk the dynamic duo
Sed & awk   the dynamic duoSed & awk   the dynamic duo
Sed & awk the dynamic duo
 
Unix day3 v1.3
Unix day3 v1.3Unix day3 v1.3
Unix day3 v1.3
 
Unix
UnixUnix
Unix
 
Awk Unix Utility Explained
Awk Unix Utility ExplainedAwk Unix Utility Explained
Awk Unix Utility Explained
 
Unix day2 v1.3
Unix day2 v1.3Unix day2 v1.3
Unix day2 v1.3
 
Unix day4 v1.3
Unix day4 v1.3Unix day4 v1.3
Unix day4 v1.3
 
Advanced Shell Scripting
Advanced Shell ScriptingAdvanced Shell Scripting
Advanced Shell Scripting
 
Testingtechniques And Strategy
Testingtechniques And StrategyTestingtechniques And Strategy
Testingtechniques And Strategy
 
Linux 101 Exploring Linux OS
Linux 101 Exploring Linux OSLinux 101 Exploring Linux OS
Linux 101 Exploring Linux OS
 
What Linux is what you should also have on your computer.
What Linux is what you should also have on your computer.What Linux is what you should also have on your computer.
What Linux is what you should also have on your computer.
 
unix crontab basics
unix crontab basicsunix crontab basics
unix crontab basics
 
Presentation of awk
Presentation of awkPresentation of awk
Presentation of awk
 
Awk essentials
Awk essentialsAwk essentials
Awk essentials
 
UNIX - Class6 - sed - Detail
UNIX - Class6 - sed - DetailUNIX - Class6 - sed - Detail
UNIX - Class6 - sed - Detail
 
Sed Unix Utility Explained
Sed Unix Utility ExplainedSed Unix Utility Explained
Sed Unix Utility Explained
 
Shell script-sec
Shell script-secShell script-sec
Shell script-sec
 
Chap06
Chap06Chap06
Chap06
 
Linux fundamental - Chap 15 Job Scheduling
Linux fundamental - Chap 15 Job SchedulingLinux fundamental - Chap 15 Job Scheduling
Linux fundamental - Chap 15 Job Scheduling
 

Ähnlich wie sed -- A programmer's perspective

Sed 命令详解
Sed 命令详解Sed 命令详解
Sed 命令详解climbtop
 
来自 Google 的 r 语言编码风格指南
来自 Google 的 r 语言编码风格指南来自 Google 的 r 语言编码风格指南
来自 Google 的 r 语言编码风格指南学峰 司
 
正则表达式入门
正则表达式入门正则表达式入门
正则表达式入门thinkinlamp
 
Diff and Patch command Manual
Diff and Patch command ManualDiff and Patch command Manual
Diff and Patch command Manualtag taglife
 
第3章算法与控制语句
第3章算法与控制语句第3章算法与控制语句
第3章算法与控制语句summerfeng
 
如何学习Bash Shell
如何学习Bash Shell如何学习Bash Shell
如何学习Bash ShellLI Daobing
 
Linux常用命令与工具简介
Linux常用命令与工具简介Linux常用命令与工具简介
Linux常用命令与工具简介weihe
 
第9章 Shell 編程
第9章 Shell 編程第9章 Shell 編程
第9章 Shell 編程kidmany2001
 
数据处理算法设计要点
数据处理算法设计要点数据处理算法设计要点
数据处理算法设计要点thinkinlamp
 
Python学习笔记
Python学习笔记Python学习笔记
Python学习笔记Lingfei Kong
 
新北市教師工作坊 -- Bash script programming 介紹
新北市教師工作坊 -- Bash script programming 介紹新北市教師工作坊 -- Bash script programming 介紹
新北市教師工作坊 -- Bash script programming 介紹fweng322
 
Effective linux.1.(commandline)
Effective linux.1.(commandline)Effective linux.1.(commandline)
Effective linux.1.(commandline)wang hongjiang
 
Effective_Vim
Effective_VimEffective_Vim
Effective_VimKing Hom
 

Ähnlich wie sed -- A programmer's perspective (20)

Sed 命令详解
Sed 命令详解Sed 命令详解
Sed 命令详解
 
来自 Google 的 r 语言编码风格指南
来自 Google 的 r 语言编码风格指南来自 Google 的 r 语言编码风格指南
来自 Google 的 r 语言编码风格指南
 
正则表达式入门
正则表达式入门正则表达式入门
正则表达式入门
 
Diff and Patch command Manual
Diff and Patch command ManualDiff and Patch command Manual
Diff and Patch command Manual
 
第3章算法与控制语句
第3章算法与控制语句第3章算法与控制语句
第3章算法与控制语句
 
如何学习Bash Shell
如何学习Bash Shell如何学习Bash Shell
如何学习Bash Shell
 
Linux常用命令与工具简介
Linux常用命令与工具简介Linux常用命令与工具简介
Linux常用命令与工具简介
 
Ppt 120-126
Ppt 120-126Ppt 120-126
Ppt 120-126
 
Ppt 120-126
Ppt 120-126Ppt 120-126
Ppt 120-126
 
第9章 Shell 編程
第9章 Shell 編程第9章 Shell 編程
第9章 Shell 編程
 
Ch9 教學
Ch9 教學Ch9 教學
Ch9 教學
 
Ch10
Ch10Ch10
Ch10
 
Ch10 教學
Ch10 教學Ch10 教學
Ch10 教學
 
数据处理算法设计要点
数据处理算法设计要点数据处理算法设计要点
数据处理算法设计要点
 
Python變數與資料運算
Python變數與資料運算Python變數與資料運算
Python變數與資料運算
 
Ch9
Ch9Ch9
Ch9
 
Python学习笔记
Python学习笔记Python学习笔记
Python学习笔记
 
新北市教師工作坊 -- Bash script programming 介紹
新北市教師工作坊 -- Bash script programming 介紹新北市教師工作坊 -- Bash script programming 介紹
新北市教師工作坊 -- Bash script programming 介紹
 
Effective linux.1.(commandline)
Effective linux.1.(commandline)Effective linux.1.(commandline)
Effective linux.1.(commandline)
 
Effective_Vim
Effective_VimEffective_Vim
Effective_Vim
 

sed -- A programmer's perspective

  • 2. 批处理(sed/awk) VS 交互性(vi)  快速大量地处理文件  可重复使用脚本  在脚本上可逐步改进  Plain Text(平文本) VS Binary(二进制格式)  Unix VS Windows :’) (etc/passwd vs 注册表)
  • 3. 更新多个POM文件中的工程版本  大量文件的重复操作(替换、转换等)
  • 4. 1. 预备知识(glob、正则表达式) 2. sed * ▪ 执行流程 ▪ 语法 ▪ 实例 3. 脚本编写实践 4. 附录 & 相关资料
  • 5.
  • 6. wild-card pattern(glob)  bash  find  --include option of grep  Regular Expression  grep  sed  awk  vi  http://en.wikipedia.org/wiki/Glob_(programming)
  • 7. 由ed引入,在grep、sed中可用 元字符 用途 . 任一字符。 # awk中可以匹配换行 * 匹配任意个(含零个)在它前面的字符 […] 字符类,第一个字符为脱字符^表示匹配 ^ 匹配行开始 $ 匹配行结尾 匹配前面字符指定的次数。 {m,n} {n}匹配n次,{n,}至少n次,{,n}至多m次 转义随后的特殊字符
  • 8. 由egrep引入,awk基本上与egrep相同 元字符 用途 + 匹配一个或多个在它前面的字符 ? 匹配零个或一个在它前面的字符 | 配置前面或后面的正则(替代方案) () 正则表达式分组 匹配前面字符指定的次数。 {m,n} {n}匹配n次,{m,}至少m次,{,n}至多m次
  • 9.
  • 10. 命令  p  d s  地址  行号 : 1 ,59, 200  正则表达式: /^foo[0-9]/
  • 11.
  • 12. 0 for(line : <Input File>) { 1 process line by command list 2 print pattern space 3 clean pattern/hold space 4 } NOTE:  2 print pattern space 这一步可以用sed –n选项关闭
  • 13. p 打印  s 替换  d 删除  a 追加 i 插入 c 修改  = 打印行号  n 下一条  q 退出
  • 14. 格式  s/reg_from/reg_to/<option>  Option  数字,如2 表示只替换第2个匹配  g,替换所有匹配,缺省只替换第一个匹配
  • 15. 替换元字符是()、(&)、(num)  在替换字符串中也用于包含(换行符) 1. s/●/ /2 #用换行符替换第2 个制表符 2. s/.Ah */ @A HEAD = / 3. s/$/ /
  • 16. 行号地址: 1 20 $ (最后一行)  正则地址: /regex/  范围: (闭区间) /reg_start/,/reg_end/ 1,/reg_end/
  • 17. 简单命令: p  地址+命令:  1d  $s/good/bad/g  /from/to/s#dog#cat#  复合命令:  <地址>{ <命令行> }
  • 18. 1p  $a/ <EOF>  /^include/d  命令:p s d a i c = n y q P D N H h G g x : b t
  • 19. 词组搜索(词组可能跨两行) ② 标签替换 ③ Velocity模板中get方法转成属性 ④ 练习一个: 去掉换行自动换行
  • 20. 使用分号: sed 's/bad/good;s/dog/cat/' file ② 使用多个e选项 sed -e ‘s/bad/good/' –e 's/dog/cat/' file ③ 使用的Bash的分行指令 sed -e 's/bad/good s/dog/cat/' file
  • 21.
  • 22. 先在典型的测试数据上测运行,对比差异 然后在实际数据上运行  实用性 不用用脚本完成100%的工作,人肉辅助。
  • 23. 递归查看目录下的文件 –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引起的等待
  • 24. 替换递归目录下文件使用sed/awk: grep <pattern> -rl . | xargs sed -e <script>
  • 25. a) UnixUtils有Windows下的Port http://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
  • 26. 在“!#”行只能有一个参数。 # (在Ubuntu、Redhat下我有测试过) 这行由*nix系统内核处理,而不是由shell处 理,因此不能有任何shell构件。  http://zh.wikipedia.org/wiki/Shebang http://en.wikipedia.org/wiki/Shebang_(Unix)
  • 27. 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