Linux文本处理三剑客

grep:文本过滤工具

sed:文本编辑器(行)stream editor

awk:文本报告生成器,Linux上的awk实现为gawk

 

grep:Global search REgular expression and Print out the line.

     作用;文本搜索工具,根据用户指定的“模式(pattern)"逐行去搜索目标文本,打印匹配到的行

     模式:由正则表达式的元字符及文本字符所编写的过略条件

     元字符:字符不表示其字面意思,而用于表示通配或控制功能

正则表达式分两类:

     基本正则表达式BRE

     扩展正则表达式ERE

     正则表达式引擎:正则表达式对文本过滤时,检查过程要由引擎进行. 引擎能理解正则表达式,并懂得利用其去过滤文本

grep用法:grep [OPTIONS] PATTERN [FILE...] ,其中PATTERN可以用正则表达式,一般用单引号引起来,FILE可以有多个

常用选项:

   --color=auto:表示对匹配到的字符串高亮显示

   -v:仅显示模式匹配不到的行

   -i:忽略字符大小写

   -o:仅显示能够被匹配到的串本身

   -q:静默模式

   -E:表示扩展正则表达式

基本正则表达式的元字符,可用于PATTERN中 字符匹配:

     .:匹配任意单个字符

    []:匹配指定范围内的任意单个字符

    [^]:匹配指定范围内的任意单个字符,^表示取反

    [:lower:]:所有小写字母

    [:upper:]:所有大写字母

    [:alpha:]:所有字母,不区分大小写

次数匹配:用于要指定次数的字符后面

      *:  表示任意次,0,1或n次

     \?:表示前面的字符出现0或1次

     \+:表示前面的字符出现1或多次

     \{m\}:m次,精确限定

     \{m,n\}:至少m次,至多n次,相当于闭区间[m,n]

     \{0,n\}:至多n次,特殊写法

     \{m,\}:至少m次,特殊写法

     .*:匹配任意长度的任意字符

 

位置锚定:

    ^:行首锚定,用于模式的最左侧

    $:行尾锚定,用于模式的最右侧

    \<或者\b:词首锚定,用于表示单词的模式的左侧

    \>或者\b:词尾锚定,用于表示单词的模式的右侧

    ^$:用于表示空白行

分组:用\(\) 转意的小括号来表示

          分组的小括号中的模式匹配到的内容,会在执行过程中被正则表达式引擎记录下来,并保存在内置的变量中,这些变量是\1,\2,...

         \1:从左侧起,第一个左括号,以及与之匹配的右括号中间的模式所匹配到的内容

         \2:从左侧起,第二个左括号,以及与之匹配的右括号中间的模式所匹配到的内容

         后向引用:使用变量引用前面的分组括号中的模式所匹配的内容

练习:

1.显示/etc/passwd文件中以bash结尾的行                                                                                     2.显示/etc/passwd文件中的两位数或三位数                                                                                   3.显示'netstat -tan'命令结果中以‘LISTEN'后跟0或1个空位字符结尾的行                                           4.添加用户bash,testbash,basher以及nologin用户(nologin用户的shell为/sbin/nologin),而后找出/etc/passwd中用户名同shell名的行                                                                                                                                                                                                                                           扩展正则表达式:                                                                                                                     grep家族的三个命令                                                                                                                  grep:基本正则表达式BRE                                                                                                                -E:扩展正则表达式                                                                                                                 -F:不支持正则表达式                                                                                                           egrep:扩展正则表达式ERE                                                                                                      fgrep:不支持正则表达式                                                                                                              扩展正则表达式的元字符:                                                                                                          字符匹配:                                                                                                                                .:匹配任意单个字符                                                                                                             []:匹配指定范围内的任意单个字符                                                                                         [^]:匹配指定范围内的任意单个字符,^表示取反                                                                            次数匹配:用于要指定次数的字符后面                                                                                        *:任意次                                                                                                                                                   ?:0次后者1次 +:1次以上                                                                                                      {m}:表示精确m次                                                                                                                  {m,n}:至少m次,至多n次                                                                                                       .*:任意长度任意字符           位置锚定:                                                                                                                               ^:锚定行首                                                                                                                                $:锚定行尾                                                                                                                         \<,\b:锚定词首                                                                                                           \>,\b::锚定词尾                                                                                                                 ^&:空白行                                                                                                                                分组括号:() 可用于后向引用:\1,\2....                                                                                                                                                 或者: a|b:表示a或b                                                                                                         C|cat:表示C或者cat                                                                                                             (C|c)at:表示Cat或者cat                                                                                                                                                 练习: 1.显示当前系统上root,centos,或者user1用户的默认shell和UID                                              2.找出/etc/rc.d/init.d/function文件中某单词(单词中间可以有下划线)后面跟着一组小括号的行         3.echo 输出一个路径,然后使用egrep输出基名。进一步,使用egrep取出目录名                               4.找出ifconfig命令执行结果中1-255之间的数字