zoukankan      html  css  js  c++  java
  • 第七章 Shell文本处理三剑客之grep

    7.1 grep

    过滤来自一个文件或标准输入匹配模式内容。

    除了grep外,还有egrep、fgrep。egrep是grep的扩展,相当于grep -E。fgrep相当于grep -f,用的少。

    Usage: grep [OPTION]... PATTERN [FILE]...

    支持的正则

    描述

    -E,--extended-regexp 模式是扩展正则表达式(ERE)
    -F,--fixed-strings 模式是换行分隔固定字符串
    -G,--basic-regexp 模式是基本正则表达式(BRE)
    -P,--perl-regexp 模式是Perl正则表达式
    -e,--regexp=PATTERN 使用模式匹配,可指定多个模式匹配
    -f,--file=FILE 从文件每一行获取模式
    -i,--ignore-case 忽略大小写
    -w,--word-regexp 模式匹配整个单词
    -x,--line-regexp 模式匹配整行
    -v,--invert-match 打印不匹配的行


    输出控制

    描述

    -m,--max-count=NUM 输出匹配的结果num数
    -n,--line-number 打印行号
    -H,--with-filename 打印每个匹配的文件名
    -h,--no-filename 不输出文件名
    -o,--only-matching 只打印匹配的内容
    -q,--quiet 不输出正常信息
    -s, --no-messages 不输出错误信息

    -r,--recursive

    --include=FILE_PATTERN

    --exclude=FILE_PATTERN

    --exclude-from=FILE

    --exclude-dir=PATTERN

    递归目录。

    只搜索匹配的文件。

    跳过匹配的文件。

    跳过匹配的文件,来自文件模式。

    跳过匹配的目录

    -c,--count 只打印每个文件匹配的行数


    内容行控制

    描述

    -B,--before-context=NUM 打印匹配的前几行
    -A,--after-context=NUM 打印匹配的后几行
    -C,--context=NUM 打印匹配的前后几行
    --color[=WHEN], 匹配的字体颜色

    博客地址:http://lizhenliang.blog.51cto.com

    QQ群:323779636(Shell/Python运维开发群)

    示例:

    1) 输出b文件中在a文件相同的行

    1
    # grep -f a b

    2) 输出b文件中在a文件不同的行

    1
    # grep -v -f a b

    3) 匹配多个模式

    1
    2
    3
    # echo "a bc de" |xargs -n1 |grep -e 'a' -e 'bc'
    a
    bc

    4) 去除空格http.conf文件空行或开头#号的行

    1
    # grep -E -v "^$|^#" /etc/httpd/conf/httpd.conf

    5) 匹配开头不分大小写的单词

    1
    2
    3
    4
    5
    # echo "A a b c" |xargs -n1 |grep -i a
    # echo "A a b c" |xargs -n1 |grep '[Aa]'
    A
    a

    6) 只显示匹配的字符串

    1
    2
    3
    # echo "this is a test" |grep -o 'is'
    is
    is

    7) 输出匹配的前五个结果

    1
    2
    3
    4
    5
    6
    # seq 1 20  |grep -m 5 -E '[0-9]{2}'
    10
    11
    12
    13
    14

    8)统计匹配多少行

    1
    2
    # seq 1 20  |grep -c -E '[0-9]{2}'
    11

    9) 匹配b字符开头的行

    1
    2
    # echo "a bc de" |xargs -n1 |grep '^b'
    bc

    10) 匹配de字符结尾的行并输出匹配的行

    1
    2
    # echo "a ab abc abcd abcde" |xargs -n1 |grep -n 'de$'
    5:abcde

    11) 递归搜索/etc目录下包含ip的conf后缀文件

    1
    # grep -r '192.167.1.1' /etc --include *.conf

    12) 排除搜索bak后缀的文件

    1
    # grep -r '192.167.1.1' /opt --exclude *.bak

    13) 排除来自file中的文件

    1
    # grep -r '192.167.1.1' /opt --exclude-from file

    14) 匹配41或42的数字

    1
    2
    3
    # seq 41 45 |grep -E '4[12]'
    41
    42

    15) 匹配至少2个字符

    1
    2
    3
    4
    5
    # seq 13 |grep -E '[0-9]{2}'
    10
    11
    12
    13

    16) 匹配至少2个字符的单词,最多3个字符的单词

    1
    2
    3
    # echo "a ab abc abcd abcde" |xargs -n1 |grep -E -w -o '[a-z]{2,3}'
    ab
    abc

    17) 匹配所有IP

    1
    # ifconfig |grep -E -o "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}"

    18) 打印匹配结果及后3行

    1
    2
    3
    4
    5
    # seq 1 10 |grep 5 -A 3
    5
    6
    7
    8

    19) 打印匹配结果及前3行

    1
    2
    3
    4
    5
    # seq 1 10 |grep 5 -B 3
    2
    3
    4
    5

    20) 打印匹配结果及前后3行

    1
    2
    3
    4
    5
    6
    7
    8
    # seq 1 10 |grep 5 -C 3
    2
    3
    4
    5
    6
    7
    8

    21) 不显示输出

    不显示错误输出:

    1
    2
    3
    4
    5
    6
    7
    # grep 'a' abc
    grep: abc: No such file or directory
    # grep -s 'a' abc
    # echo $?
    2
    不显示正常输出:
    # grep -q 'a' a.txt

    grep支持上一章的基础和扩展正则表达式字符。

  • 相关阅读:
    java 新特性学习笔记
    Can't zip RDDs with unequal numbers of partitions
    编写自己的代码库(javascript常用实例的实现与封装)
    Python高级笔记(一) -- GIL (全局解释器锁)
    CMake快速入门
    Cmake出现CMake Error: Could not find CMAKE_ROOT !!!
    Python复习笔记(十一)TCP/IP协议
    用vim打开.py和.sh文件自动添加头
    如何实现Python调用C代码--python与C之间如何通信(swig)
    dpkg用管道批量删除deb
  • 原文地址:https://www.cnblogs.com/fungitive/p/9136204.html
Copyright © 2011-2022 走看看