zoukankan      html  css  js  c++  java
  • Linux正则表达式三剑客(grep sed awk)基本用法

    正则表达式三剑客(grep sed awk)基本用法

    正则表达式(Regual Expression,REGEXP):由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字面意义,而是用于表示控制或通配的功能。是一套规则和方法,工作时以行为单位进行,一次处理一行,化繁为简,提高工作效率。仅受Linux三剑客(grep sed awk)使用,其它命令无法使用。

    正则表达式的分类

    1、基本正则表达式BRE: 匹配字符 、匹配字数 、位置锚定。

    符号 作用
    ^ 尖角号,用于模式的最左侧,如“^oldboy”,匹配以oldboy单词开头的行
    $ 美元符,用于模式的最右侧,如“oldboy&”,表示以oldboy结尾的单词行
    ^$ 组合符,表示空行
    . 匹配任意一个且只有一个字符,不能匹配空行
    \ 转义字符,让特殊含义的字符,显出原形还原本意,例如\ .代表小数点
    * 匹配前一个字符(连续出现)0次或1次以上,重复0次代表空,即匹配所有内容
    .* 组合符,匹配所有内容
    ^.* 组合符匹配任意多个字符开头的内容
    .*$ 组合符匹配任意多个字符结尾的内容
    [abc] 匹配[]集合内的任意一个字符,a或b或c,可以写为[a-c]
    [^abc] 匹配除了后面的任意字符,a或b或c,表示对[abc]的取反

    2、扩展正则表达式ERE

    字符 作用
    + 匹配前一 个字符一次或多次
    []+ 匹配括号内的“:”\“ 字符一次或多次
    ? 匹配前一个字符0次或多次
    \ 表示或者,同时过滤多个字符串
    () 分组过滤,被括起来的内容表示一个整体
    a{n,m} 匹配前一个字符最少n次,最多m次
    a{n,} 匹配前一个字符最少n次
    a{n} 匹配前一个字符正好n次
    a{,m} 匹配前一个字符最多n次

    grep 擅长单纯的查找或匹配文本内容

    参数选项
    -v 排除匹配结果
    -n 显示匹配行与行号
    -i 不区分大小写
    -c 只统计匹配的行数
    -E 使用Egrep命令
    --color=auto 为grep过滤结果添加颜色
    -w 只匹配过滤的单词
    -o 只匹配输出的内容

    grep基本使用方法

    找出所有m开头的行
    
     ]#grep -i -n "^m.*"  luffy.txt 
    
    找出结尾的行
    
    ]#grep -n " \ .$"  luffy.txt
    
    找出所有允许登录的用户,解释器为/bin/bash/的行
    
    ]#grep -i -n ".\/bin\/bash$"  pwd.txt 
    
     ]#grep -n "/bin/bash$"   pwd.txt 
    
    找出系统/tmp中的txt文件,且名字里包含a或b的字符
    
    ]#find  /tmp  -name "*.txt" |grep -E "t|e"
    
    找出文件中good     glad的行
    
    ]#grep -E "g(oo|la)d"  test.txt 
    

    sed 更适合编辑、处理匹配到的文本内容

    参数选项 解释
    -n 取消默认sed的输出,常与sed内置命令p一起用
    -i 直接将修改结果写入文件,不用-i,sed修改的是内存数据
    -e 多次编辑,不需要管道符
    -r 支持正则扩展

    sed的内置命令符 用于对文件进行不同的操作功能,如对文件增删改查

    sed常用 内置命令符

    sed的内置命令符 解释
    a append,对文本追加,在指定行后面添加一行/多行文本
    d Delete,删除匹配行
    i insert,表示插入文本,在指定行前添加一行/多行文本
    p Print,打印匹配行的内容,通常p与-n一起用
    s/正则/替换内容/g 匹配正则内容,然后替换内容(支持正则),结尾g代表全局匹配

    sed匹配范围

    范围 解释
    空地址 全文处理
    单地址 指定文件某一行
    /pattern/ 被模式匹配到的每一行
    范围区间 10,20 十到二十行, 10,+5第十行向下5行,/pattern/,/pattern/
    步长 1~2,表示1,3,5,7,9 2~2两个步长,表示2,4,6,8

    sed基本使用方法

    输出第2,3行信息
    
     sed  -n '2,3p'  pwd.txt
    
    过滤出含有root的字行
    
    sed   -n  "/root/p"  pwd.txt
    
    删除有关root的行
    
    sed "/root/d"   pwd.txt 
    
    将文件中的root 替换成 beet
    
     sed  "s/root/beet/p"  pwd.txt -n        全局替换  sed  "s/root/beet/gp"  pwd.txt -n
    
    将文件中的root替换成beet      同时把games替换为stay
    
    sed   -e  "s/root/beet/p"  -e  "s/games/stay/p"  pwd.txt -n
    
    在文件第二行下追加内容  白日依山尽 字符
    
    sed  "2a 白日依山尽"  pwd.txt 
    
    在文件第4行上追加2两行内容  更上一层楼  欲穷千里目  字符
    
    sed "4i 更上一层楼\n欲穷千里目" pwd.txt
    
    取出Linux  IP 地址
    
    ifconfig ens33|sed "2s/^.*inet//p"   |sed "2s/netm.*$//p" -n 
    
    ifconfig ens33|sed -e  "2s/^.*inet//" -e  "2s/net.*$//p" -n
    
  • 相关阅读:
    9. Palindrome Number
    7. Reverse Integer
    6. ZigZag Conversion
    1. Two Sum
    [leetcode]Binary Tree Zigzag Level Order Traversal
    [leetcode]Scramble String
    [leetcode]Convert Sorted Array to Binary Search Tree
    [leetcode]Sum Root to Leaf Numbers
    [leetcode]Longest Consecutive Sequence
    [leetcode]Reverse Linked List II
  • 原文地址:https://www.cnblogs.com/bb9527/p/14194142.html
Copyright © 2011-2022 走看看