• 正则表达式 grep文本查询 sed流处理 应用


    一、正则表达:

    ^:以什么什么开头,^a:以a字符开头
    $:以什么什么结尾,b$:以b字符结尾
    *:左边字符0~无穷个
    +:左边字符1~无穷个
    .:代表单字符
    ?:前导字符为零个或1个
    {n}:左面字符有n个
    {n}$:左面字符n个结尾
    {n,m}:左面字符n到m个
    {n,}:左面字符n到无穷个
    []:匹配中括号中的限定的1个字符,有特殊符号需要转义字符
    [a-z]:a到z中任意单字符
    [a-zA-Z]:a到z和A到Z中任意单字符
    [a-Z]:就是[a-zA-Z]
    [0-9]{t}:0到9中任意t个单字符,也就是[0-9][0-9]
    ^[0-9]:以0到9中单数字开头
    ^[^0-9]:除了0到9中单数字开头

    二、grep:文本搜索,匹配内容

    grep 选项参数 命令
    例如:

    #grep -n 'root' /etc/passwd     #静默查询/etc/passwd文件中root字符
    

    选项参数:

    -n:显示行号
    -o:只显示匹配内容
    -q:静默匹配不打印内容通过"echo $?"确认执行是否成功
    -l:打印文件名
    -A 2:打印本行加下2行
    -B 3:打印本行加上3行
    -C 4:打印本行加上4行加下4行
    -i:匹配忽略大小写
    -iv:匹配内容取反
    -c:统计行数
    -w:匹配单词
    -E:扩展的grep版本,等同egrep
    'abc':匹配单引号中的字符
    -e 'abcd' -e 'abce':匹配abcd的单词或者abce的单词
    'abc(d|e)':匹配abcd或者abce的单词,同上

    三、sed:流处理

    sed 选项参数 命令
    例如:

    #sed -n '3p' test.txt     #静默输出第3行内容,3为定位行位置,p为命令
    #sed ‘4a abcd’ test.txt     #第4行追加abcd字符,a为命令
    

    其中,

    选项参数:

    -n:静默处理,不打印输出结果

    命令:

    p:打印
    c:替换行内容
    a:追加内容
    i:插入内容
    1,4d:删除1到4行内容
    1d,4d:删除1行和4行内容
    d:删除
    //:命令中使用正则表达式放入//中
    //d:删除正则匹配到的行
    s:替换
    s/aaa/bbb/g:将全部行中的aaa替换为bbb,不加g则每行只替换第一个aaa
    s/()()/12/g:匹配两个括号中的内容,12表示将第一个括号和第二个括号内容显示
    例如:

    #sed 's/^(.)(.*)$/2/' test.txt     #test文件中任意行去掉第一个字符,^(.)任意单字符开始,(.*)任意0到无穷字符,2只显示第二个括号部分
    

    四、应用grep(正则表达式及字符处理)

    目标文件:/etc/passwd,使用grep命令或egrep处理

    1.显示出所有含有root的行

    #egrep 'root' /etc/passwd
    

    2.输出任何包含bash的所有行,还要输出紧接着这行的上下各两行的内容

    #egrep -C 2 'bash' /etc/passwd
    

    3.显示出有多少行含有nologin

    #egrep -c 'nologin' /etc/passwd
    

    4.显示出那些行含有root,并将行号一块输出

    #egrep -n 'root' /etc/passwd
    

    5.-

    6.新建用户abominable、abominate、anomie、atomize编写正则表达式,将他们匹配出来

    #egrep '^a[a-z]omi[a-z]*' /etc/passwd
    

    7.建5个用户Alex213sb、Wpq2222b、yH438PIG、egon666、egon过滤出用户名组成是字母+数字+字母的行

    #egrep '^[a-Z]+[0-9]+[a-Z]+' /etc/passwd
    

    8.显示出/etc目录下所有包含root的文件名

    #find /etc |egrep 'root'
    

    9.过滤掉/etc/ssh/sshd_config内所有注释和所有空行

    #egrep '^[^#][.]*' /etc/ssh/sshd_config
    

    五、应用Sed

    以/etc/passwd文件为模板

    1.删除文件每行的第一个字符

    #sed -r 's/(.)(.*)/2/g' /etc/passwd
    

    2.删除文件每行的第二个字符

    #sed -r 's/(.)(.)(.*)/13/g' /etc/passwd
    

    3.删除文件每行的最后一个字符

    #sed -r 's/(.*)(.)$/1/g' /etc/passwd
    

    4.删除文件每行的倒数第二个字符。

    #sed -r 's/(.*)(.)(.)$/13/g' /etc/passwd
    

    5.删除文件每行的第二个单词。

    #sed -r 's/^([a-Z]*)([^a-Z]*)([a-Z]*)([^a-Z]*)/124/g' /etc/passwd
    

    6.删除文件每行的倒数第二个单词。

    #sed -r 's/([^a-Z]*)([a-Z]*)([^a-Z]*)([a-Z]*)$/134/g' /etc/passwd
    

    7.删除文件每行的最后一个单词。

    #sed -r 's/([^a-Z]*)([a-Z]*)$/1/g' /etc/passwd
    

    8.交换每行的第一个字符和第二个字符。

    #sed -r 's/^(.)(.)/21/g' /etc/passwd
    

    9.交换每行的第一个字符和第二个单词。*

    #sed -r 's/^(.)([a-Z]*)([^a-Z]*)([a-Z]*)([^a-Z]*)/42315/g' /etc/passwd
    

    10.交换每行的第一个单词和最后一个单词。*

    #sed -r 's/^([a-Z]*)([^a-Z]*)(^[a-Z]*)([a-Z])$/321/g' /etc/passwd
    

    11.删除一个文件中所有的数字。

    #sed -r 's/[0-9]//g' /etc/passwd
    

    12.删除每行开头的所有空格。

    #sed -r 's/^[ ]*//g' /etc/passwd
    

    13.用制表符替换文件中出现的所有空格。

    #sed -r 's/[ ]/	/g' /etc/passwd
    

    14.把所有大写字母用括号()括起来。

    #sed -r 's/[A-Z]/(&)/g' /etc/passwd
    

    15.打印每行3次。

    #sed -r '{p;p}' /etc/passwd
    

    16.只显示每行的第一个单词。

    #sed -r 's/^([][ ]*)([a-Z]*)(.*)/2/g' /etc/passwd
    

    17.打印每行的第一个单词和第三个单词。

    #sed -r 's/^([ ]*)([a-Z]*)([^a-Z]*)([a-Z]*)([^a-Z]*)([a-Z]*)(.*)/26/g' /etc/passwd
    

    18.用命令获取格式为 mm/yy/dd 的日期格式,结合管道,将其换成 mm;yy;dd格式

    #date ‘+%m/%y/%m’ | sed -r 's/[/]/;/g'  
    
  • 相关阅读:
    小记面向对象
    公司分层思想的演化历程
    我对uml类图关系的理解
    cms真实问题的来源以及模拟解决方案
    HTTP 协议基础
    Requests库
    接口测试概念
    Python中的strip()函数的用法
    Robot Framework环境搭建
    Python unittest excel数据驱动
  • 原文地址:https://www.cnblogs.com/sunqim16/p/6600486.html
Copyright © 2020-2023  润新知