人若无名,便可专心练剑

linux shell 之 字符处理命令 三

  |   0 评论   |   2,476 浏览

    1,grep 命令

    grep:内容查找

    用法:

    用法: grep [选项]... PATTERN [FILE]...
    在每个 FILE 或是标准输入中查找 PATTERN。
    默认的 PATTERN 是一个基本正则表达式(缩写为 BRE)。
    例如: grep -i 'hello world' menu.h main.c
    
    正则表达式选择与解释:
      -E, --extended-regexp     PATTERN 是一个可扩展的正则表达式(缩写为 ERE)
      -F, --fixed-strings       PATTERN 是一组由断行符分隔的定长字符串。
      -G, --basic-regexp        PATTERN 是一个基本正则表达式(缩写为 BRE)
      -P, --perl-regexp         PATTERN 是一个 Perl 正则表达式
      -e, --regexp=PATTERN      用 PATTERN 来进行匹配操作
      -f, --file=FILE           从 FILE 中取得 PATTERN
      -i, --ignore-case         忽略大小写
      -w, --word-regexp         强制 PATTERN 仅完全匹配字词
      -x, --line-regexp         强制 PATTERN 仅完全匹配一行
      -z, --null-data           一个 0 字节的数据行,但不是空行
    
    杂项:
      -s, --no-messages         不显示错误信息
      -v, --invert-match        选中不匹配的行
      -V, --version             显示版本信息并退出
          --help                显示此帮助并退出
          --mmap                忽略向后兼容性
    
    输出控制:
      -m, --max-count=NUM       NUM 次匹配后停止
      -b, --byte-offset         输出的同时打印字节偏移
      -n, --line-number         输出的同时打印行号
          --line-buffered       每行输出清空
      -H, --with-filename       为每一匹配项打印文件名
      -h, --no-filename         输出时不显示文件名前缀
          --label=LABEL         将LABEL 作为标准输入文件名前缀
      -o, --only-matching       只显示一行中匹配PATTERN 的部分
      -q, --quiet, --silent     不显示所有输出
          --binary-files=TYPE   假定二进制文件的TYPE 类型;
                                TYPE 可以是`binary', `text', 或`without-match'
      -a, --text                等同于 --binary-files=text
      -I                        等同于 --binary-files=without-match
      -d, --directories=ACTION  操作目录的方式;
                                ACTION 可以是`read', `recurse',或`skip'
      -D, --devices=ACTION      操作设备、先入先出队列、套接字的方式;
                                ACTION 可以是`read'或`skip'
      -r, --recursive           等同于--directories=recurse
      -R, --dereference-recursive       与上类似,但遍历所有符号链接
          --include=FILE_PATTERN  只查找匹配FILE_PATTERN 的文件
          --exclude=FILE_PATTERN  跳过匹配FILE_PATTERN 的文件和目录
          --exclude-from=FILE   跳过所有除FILE 以外的文件
          --exclude-dir=PATTERN  跳过所有匹配PATTERN 的目录。
      -L, --files-without-match  只打印不匹配FILEs 的文件名
      -l, --files-with-matches  只打印匹配FILES 的文件名
      -c, --count               只打印每个FILE 中的匹配行数目
      -T, --initial-tab         行首tabs 分隔(如有必要)
      -Z, --null                在FILE 文件最后打印空字符
    
    文件控制:
      -B, --before-context=NUM  打印以文本起始的NUM 行
      -A, --after-context=NUM   打印以文本结尾的NUM 行
      -C, --context=NUM         打印输出文本NUM 行
      -NUM                      等同于 --context=NUM
          --color[=WHEN],
          --colour[=WHEN]       使用标志高亮匹配字串;
                                WHEN 可以是`always', `never'或`auto'
      -U, --binary              不要清除行尾的CR 字符(MSDOS 模式)
      -u, --unix-byte-offsets   当CR 字符不存在,报告字节偏移(MSDOS/Windows 模式)
    
    ‘egrep’即‘grep -E’。‘fgrep’即‘grep -F’。
    直接使用‘egrep’或是‘fgrep’均已不可行了。
    若FILE 为 -,将读取标准输入。不带FILE,读取当前目录,除非命令行中指定了-r 选项。
    如果少于两个FILE 参数,就要默认使用-h 参数。
    如果有任意行被匹配,那退出状态为 0,否则为 1;
    如果有错误产生,且未指定 -q 参数,那退出状态为 2。
    
    例子:第一部分,为员数据,第二部分为通过grep后所选取的数据
    root@c2y2:/home/exp/vodxunlei/source# cat 1060.txt  
    &z">http://www.rmdown.com/link.php?hash=
    141ee5eee2e2a407f50bee7ac32a27ad11705e3c81c</a><br><img src='http://img6.imgtiger.com/images/6473105
    141e8e9651b23cd7d34f228d83cf588475f81e6c7cc
    141b8b2cf9c7782fdd868e9c60189cc5ded29bd296f
    141e0bd031462fc00edd55d42453ef48f919f297e7b
    1412ad7031bcb3753ad4e8c53b20fc58ab9d50af988
    141b4c476b545987241c15d3564a40a9214d257431e</a><br></div>
    
    </td></tr></table>
    </th></tr>
    <tr class="
    141ab3526e410bedc47f81ae58e3f718f6579307428</a><br><br><br><font color=gray>[ ���N��212121��2014-03-
    141463d97766a28483fc852e0839317a5be98eac57e</a><br>�����y�{���۹������������Ђ��˵Đۺã��ҿ�������
    14163f7ca8d88f6c38a7178fe0fc079d7e90abec24f
    root@c2y2:/home/exp/vodxunlei/source# cat 1060.txt|grep "[a-z0-9]\{43\}"
    141ee5eee2e2a407f50bee7ac32a27ad11705e3c81c</a><br><img src='http://img6.imgtiger.com/images/6473105
    141e8e9651b23cd7d34f228d83cf588475f81e6c7cc
    141b8b2cf9c7782fdd868e9c60189cc5ded29bd296f
    141e0bd031462fc00edd55d42453ef48f919f297e7b
    1412ad7031bcb3753ad4e8c53b20fc58ab9d50af988
    141b4c476b545987241c15d3564a40a9214d257431e</a><br></div>
    141ab3526e410bedc47f81ae58e3f718f6579307428</a><br><br><br><font color=gray>[ ���N��212121��2014-03-
    141463d97766a28483fc852e0839317a5be98eac57e</a><br>�����y�{���۹������������Ђ��˵Đۺã��ҿ�������
    14163f7ca8d88f6c38a7178fe0fc079d7e90abec24f
    
    grep正则表达式:
    ^ 行的开始 如:'^grep'匹配所有以grep开头的行。 
    $ 行的结束 如:'grep$'匹配所有以grep结尾的行。 
    . 匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符
    * 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。
    [] 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。 
    [^] 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。 
    \(..\) 标记匹配字符,如'\(love\)',love被标记为1。 
    \ 锚定单词的开始,如:'\匹配包含以grep开头的单词的行。 
    \> 锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。 
    x\{m\} 重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。 
    x\{m,\} 重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。 
    x\{m,n\}重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。
    \w 匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。
    \b 单词锁定符,如: '\bgrep\b'只匹配grep
    拓展:传送门

    2,sed 命令

    sed [-nefr] [动作]
    参数:
    -n  :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 
          的数据一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过
          sed 特殊处理的那一行(或者动作)才会被列出来。
    -e  :直接在指令列模式上进行 sed 的动作编辑;
    -f  :直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的 
          sed 动作;
    -r  :sed 的动作支持的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
    -i  :直接修改读取的档案内容,而不是由屏幕输出。
    
    动作说明:  [n1[,n2]]function
    n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作
             是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』
    
    function 有底下这些东东:
    a   :新增, a 的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)~
    c   :取代, c 的后面可以接字符串,这些字符串可以取代 n1,n2 之间的行!
    d   :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
    i   :插入, i 的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行);
    p   :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运作~
    s   :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配
          正规表示法!例如 1,20s/old/new/g 就是啦!




    dropbox:邀请您的加入,让你随时随地同步您的文件:https://db.tt/wCU4HQq4

    人生格言: 如果说人生是自我编写的程序, 那么青春就是其中意味深长的代码。 或简单,分解成彼此独立的字符: 或复杂, 拼凑成一连串神秘的语句。 我们尝试着不断调试, 不断优化,无论编译结果如何, 过程才是最美。 如果说这段代码不能复制, 那么我愿意用一生去续写.

    评论

    发表评论

    validate