第19章. 正则表达式

为了充分发挥shell编程的威力,你需要精通正则表达式。 在脚本编程中的一些命令和软件包普遍使用正则表达式,例如grep, expr, sedawk.

19.1. 一个简要的正则表达式介绍

一个正式表达式是一个字符串.字符串里的字符被称为元字符,它们可以表示了比它们字面上看起来的意思更丰富的含义。例如,一个引用符号可以表示引用一个人演讲中的话,或者表示下面将要讲到的引申表示的意思。正则表达式是一个字符或/和元字符组合成的字符集,它们匹配(或指定)一个模式。.

一个正则表达式包含下面一个或多个项:

正则表达是的主要作用是用来文本搜索和字串操作。一个正则表达式匹配一个字符或是一串字符--完整的一串字符或是另外一个字符串的子串.

一些sed, ed, 和ex的版本像GNU的软件版本一样支持上面描述的扩展正则表达式的版本。

Sed, awk, 和Perl在脚本中被用作过滤器, "过滤"或转换文件/IO流的时候以正则表达式作为参数。参考例子 A-12例子 A-17 来理解这种用法.

在正则表达式这个复杂主题的标准参考是Friedl的Mastering Regular Expressions.由Dougherty和Robbins写的 Sed & Awk也给出了一个清晰的正则表达式论述. 查看参考书目 找到这个主题更多的信息.

[1]

因为Since sed, awk, 和and grep 通常处理单行,而不能匹配一个新行符. 在要处理多行的一个输入时,可以使用点操作符,它可以匹配新行符。
   1 #!/bin/bash
   2 
   3 sed -e 'N;s/.*/[&]/' << EOF   # Here Document
   4 line1
   5 line2
   6 EOF
   7 # 输出:
   8 # [line1
   9 # line2]
  10 
  11 
  12 
  13 echo
  14 
  15 awk '{ $0=$1 "\n" $2; if (/line.1/) {print}}' << EOF
  16 line 1
  17 line 2
  18 EOF
  19 # 输出:
  20 # line
  21 # 1
  22 
  23 
  24 # 多谢, S.C.
  25 
  26 exit 0