• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    详解正则表达式及Linux三大文本处理工具

    grep、sed和awk都是文本处理工具,虽然都是文本处理工具但却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了。

    一、正则表达式

    1、匹配字符的类型

    [a-z]:小写字母

    [A-Z]:大写字母

    [a-Z]:小或大写字母

    [0-9]:数字

    [a-zA-Z0-9]:表示匹配一个为字母或数字的字符

    . :匹配1个任意字符,空格除外

    [0-f]:16进制数

    abc | def:abc或def
    a (bc | de) f:abcf 或 adef

    \:单词头 单词一般以空格或特殊字符做分隔,连续的字符串被当做单词

    \&;:单词尾

    [^表达式]:除小写字母以外的所有字符,如此类推。

    2、后跟以下符号控制匹配的数量

    此类符号的左侧要有上面第一点的表达式

    表达式*:0或n个字符

    表达式+:1或n个字符

    表达式?:0或1个字符

    表达式{n}:n个字符

    表达式{n:m}:n到m个字符

    表达式{n,}:至少n个字符

    【例】[a-z]*表示匹配0个或多个小写字母

    3、将匹配的字符控制在头尾
    ^表达式:头部符合

    表达式$:尾部符合

    二、Linux三大文本处理工具

    1、egrep 筛选工具

    grep的扩展版,可以使用正则表达式

    语法:

    egrep -选项  '正则表达式'  文件名

    选项:

    -n :显示行号
    -o :只显示匹配的内容
    -q :静默模式,没有任何输出,得用$?来判断执行成功没有,即有没有过滤到想要的内容
    -l :如果匹配成功,则只将文件名打印出来,失败则不打印,通常-rl一起用,grep -rl 'root' /etc
    -A :如果匹配成功,则将匹配行及其后n行一起打印出来
    -B :如果匹配成功,则将匹配行及其前n行一起打印出来
    -C :如果匹配成功,则将匹配行及其前后n行一起打印出来
    --color
    -c :如果匹配成功,则将匹配到的行数打印出来
    -i :忽略大小写
    -v :取反,不匹配
    -w:匹配单词

    2、sed 流编辑器

    语法:

    语法1:sed  -选项  '数字定位+命令'  文件名

    选项:

    -n:静默模式,不输出
    -e:多项编辑,这个不是很清楚
    -i:直接修改文件内容,而不是输出
    -r:扩展模式,可使用正则表达式
    -f:指定文件名,将动作写在新的文件内

    命令:

    a ∶ 追加append,
    c ∶ 改变change,
    d ∶ 删除delete,
    i ∶ 插入insert, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
    p∶ 列印print
    s∶ 取代substitute,可以直接进行替换的工作。通常这个 s 的动作可以搭配正则表达式。例如 1,20s/old/new/g

    *s命令特别说明:

    使用{命令1:命令2:命令3}可增加使用多个命令

    语法2:sed  -r  '替换命令s/正则表达式/替换内容/贪婪选项g'  文件名

    定位的两种方法:

    ①数字定位(输入行序号定位)

    十进制数
    1:单行
    1,3:范围 从第一行到第三行
    2,+4:匹配行后若干行
    4,~3:从第四行到下一个3的倍数行
    2~3:第二行起每间隔三行的行
    $:尾行
    1!:除了第一行以外的行

    【例】sed -n '1p' /etc/passwd

    ②正则表达式定位

    正则必须用//包裹起来

    扩展正则需要用 -r 参数或转义

    替换可使用正则表达式的子模式,即小括号(),可以\1、\2代表子模式

    【例】sed -r 's/(.)(.)/\2\1/ file1 表示将匹配到的第一部分和第二部分替换

    *贪婪选项:填上g,代表把一行中所有匹配项替换

    3、awk 文本分析工具

    由命令、正则(需要用//包围起来)、比较和关系运算组合而成

    使用option中的-F参数定义间隔符号

    用$1,$2,$3等的顺序表示files中每行以间隔符号分隔的各列不同域,NF变量表示当前记录的字段数

    语法

    awk -选项 参数  '逻辑判断{命令 变量1,变量2,变量3}' 文件名

    选项

    -F 定义字段分隔符,默认的分隔符是连续的空格或制表符
    -v 定义变量并赋值 也可以借用次方式从shell变量中引入

    AWK变量

    NR 当前记录的个数(全部文件连接后的统计)
    FNR 当前记录的个数(仅为当前文件的统计,非全部)
    FS 字段分隔符 默认为连续空格或制表符,可以使用多个不同的符号做分隔符 -F[:/]
    OFS 输出字符的分隔符 默认是空格
    # awk -F: 'OFS="=====" {print $1,$2}' /etc/passwd
    root=====x
    NF 当前读入行的字段个数
    ORS 输出记录分隔符 默认是换行
    # awk -F: 'ORS="=====" {print $1,$2}' /etc/passwd
    root x=====bin x=====
    FILENAME 当前文件名

    【例1】使用AWK变量

    # awk '{print NR,FNR,$1}' file1 file2 
    1 1 aaaaa
    2 2 bbbbb
    3 3 ccccc
    4 1 dddddd
    5 2 eeeeee
    6 3 ffffff
    # 

    【例2】引用shell变量的方法

    # a=root
    # awk -v var=$a -F: '$1 == var {print $0}' /etc/passwd
    或者 把整个命令拆开传递,让shell变量外露,
    # awk -F: '$1 == "'$a'" {print $0}' /etc/passwd
    # a=NF
    # awk -F: '{print $'$a'}' /etc/passwd

    逻辑运算(可直接引用域进行运算)

    = += -= /= *= 赋值

    || ! 逻辑与 逻辑或 逻辑非

    ~ !~  匹配正则或不匹配,正则需要用 /正则/ 包围住
    = > >= != ==  关系 比较字符串时要把字符串用双引号引起来

    $ 字段引用:字段引用需要加$,而变量引用直接用变量名取

    + - * / % ++ --  运算符

    转义序列

    \\ \自身
    \$ 转义$
    \t 制表符
    \b 退格符
    \r 回车符
    \n 换行符
    \c 取消换行

    以上所述是小编给大家介绍的正则表达式及Linux三大文本处理工具,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

    您可能感兴趣的文章:
    • linux文本处理工具及正则表达式集锦
    • Linux中文本处理工具之sort命令详解
    • Linux中文本处理工具之cut命令详解
    • Linux文本处理工具使用详解
    上一篇:正则表达式注册表验证笔记整理
    下一篇:使用正则表达式(regex_replace)模拟读取INI文件
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    详解正则表达式及Linux三大文本处理工具 详解,正则,表达式,及,Linux,