셸 텍스트 필터 의 grep

5665 단어 초급
linux 텍스트 처리 삼 총사
grep, sed, awk 는 모두 텍스트 처리 도구 입 니 다. 모두 텍스트 처리 도구 이지 만 각자 의 장단 점 이 있 습 니 다. 하나의 텍스트 처리 명령 은 다른 것 으로 완전히 바 꿀 수 없습니다. 그렇지 않 으 면 세 개의 텍스트 처리 명령 이 나타 나 지 않 습 니 다.
grep: stream editor, 텍스트 필터, 텍스트 필터 만 있 으 면 grep 를 사용 할 수 있 습 니 다. 그 효율 은 다른 것 보다 훨씬 높 습 니 다.sed: Stream EDitor, 흐름 편집기, 기본적으로 힘 든 모드 공간 만 있 고 원본 데 이 터 를 처리 하지 않 으 며 줄 에 대해 처리 합 니 다.awk: 보고서 생 성기, 포맷 후 표시.처 리 된 데 이 터 를 보고 와 같은 정 보 를 만 들 거나 처리 한 데 이 터 를 열 에 따라 처리 하려 면 awk 를 사용 하 는 것 이 좋 습 니 다.
grep
Global search REgular expression and Print out the line
作用:文本搜索工具,根据用户指定的“模式“对文本主行进行匹配,打印匹配到的行;
  模式:由正则表达式字符及文本字符所编写的过滤条件;
  REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些不表示字符字面意义,而标示控制或统配的功能;

grep [options] pattern [file]
  选项:
    --color=auto:对匹配到的文本进行着色显示;
    -v:显示不能被pattern匹配到的行;
    -i:忽略字符大小写;
    -o:仅显示匹配到的字符串
    -q:静默模式,不输出任何信息;
    -A #:after,后#行;
    -B #:before。前#行;
    -C #:context,前后各#行;

基本正则表达式元字符:
  字符匹配:
    .   匹配任意单个字符;
    []  匹配指定范围内的任意单个字符;
    [^] 匹配指定范围外的任意单个字符;
    [:digit:] [:lower:] [:upper:] [:alpha:] [:punct:] [:space:]

  匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数;
    *:匹配前面的字符任意次;
      例如:grep “x*y“
        abxy
        xay
        xxxxxxy
      贪婪模式
    .*:任意长度的任意字符;
    \?:匹配其前面的字符0或1次,即前面的字符可有可无;
    \+:匹配其前面的字符至少一次
    \{m}:匹配前面的字符m次
    \{m,n\}:匹配前面的字符至少m次,至多n次;
      \{0,n\}:匹配前面的字符至多n次;
      \{m,\}:匹配前面的字符至少m次;

  位置锚定:
    ^: 行首锚定;用于模式的最左侧;
    $: 行尾锚定;用于模式的最右侧;
    ^PATTERN$: 用于模式匹配整行;
       ^$   ^[[:space:]]*$

    \<\b:词首锚定;用于单词模式的左侧;
    \>\b:词尾锚定;用于单词模式的右侧;
    \<PATTERN\>:匹配整个单词;

  分组:
    \(\): 将一个或多个字符捆绑在一起,当作一个整体进行处理;
        \(xy\)*ab
    Note:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1 \2 \3..
      \1:从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;
        \(ab\+\(xy\)*\):
          \1: ab\+\(xy\)*   \2: xy
    后向引用:引用前面的分组括号中的模式所匹配字符,(而非模式本身)        
练习:
1 显示/proc/meminfo文件中以大小s开头的行;
grep -i '^s' /proc/meminfo
grep ^[sS] /proc/meminfo
grep -e ^s -e ^S /proc/meminfo

2 显示/etc/passwd文件中不以/bin/bash结尾的行;
grep -v '/bin/bash$' /etc/passwd

3 显示/etc/passwd文件中ID号最大的用户的用户名;
sort -t: -k3 -n /etc/passwd | tail -1 | cut -d: -f1

4 如果root用户存在,显示默认的shell程序;
grep '^root' /etc/passwd | cut -d: -f7

5 找出/etc/passwd中的两位或三位数;
grep '\' /etc/passwd

6 显示/etc/rc.d/rc.sysinit文件中,至少以一个空白字符开头的且后面存在非空白字符的行;
grep '^[[:space:]]\+[^[:space:]]' /etc/rc.d/rc.sysinit

7 找出“netstat -tan“命令的结果中以“LISTEN“后跟01或多个空白字符结尾的行;
netstat -tan | grep 'LISTEN[[:space:]]*$'

8 添加用户bash,testbash,bashrc以及noligin(其shell为/sbib/nologin);而后找
出/etc/passwd文件中用户名同shell名的行;
grep '^\(\\).*/\1$' /etc/passwd

좋은 웹페이지 즐겨찾기