zoukankan      html  css  js  c++  java
  • Linux5.6 正则练习

    1.  把test.txt 中出现第一组数字移动到行末尾

    [root@chyuanliuNJ awk]# sed -nr '24,28s#([^0-9][^0-9]*)([0-9][0-9]*)([^0-9].*$)#132#'p text.txt
    operator:x::0:operator:/root:/sbin/nologin11
    games:x::100:games:/usr/games:/sbin/nologin12
    games:x::100:games:/usr/games:/sbin/nologin12
    ftp:x::50:FTP User:/var/ftp:/sbin/nologin14
    ftp:x::50:FTP User:/var/ftp:/sbin/nologin14
    

     2.  把test.txt中出现的第一个数字和最后一个单词替换位置

    [root@chyuanliuNJ awk]# sed -nr '7,11s#([^0-9][^0-9]*)([0-9][0-9]*)([^0-9].*)([^a-zA-Z])([a-zA-Z][a-zA-Z]*$)#15342#'p text.txt
    bin:x:nologin:1:bin:/bin:/sbin/1
    bin:x:nologin:1:bin:/bin:/sbin/1
    daemon:x:nologin:2:daemon:/sbin:/sbin/2
    daemon:x:nologin:2:daemon:/sbin:/sbin/2
    adm:x:nologin:4:adm:/var/adm:/sbin/3
    [root@chyuanliuNJ awk]# sed -n '7,11'p text.txt
    bin:x:1:1:bin:/bin:/sbin/nologin
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    

     3.  每个单词的第一个小写字母变大写;所有小写变大写;所以大写变小写

    [root@chyuanliuNJ awk]# sed -nr '26,28s/[a-z]/u&/g'p text.txt
    Games:X:12:100:Games:/Usr/Games:/Sbin/Nologin
    Ftp:X:14:50:FTP User:/Var/Ftp:/Sbin/Nologin
    Ftp:X:14:50:FTP User:/Var/Ftp:/Sbin/Nologin
    [root@chyuanliuNJ awk]# sed -n '26,28s/[a-z]/u&/g'p text.txt
    GAMES:X:12:100:GAMES:/USR/GAMES:/SBIN/NOLOGIN
    FTP:X:14:50:FTP USER:/VAR/FTP:/SBIN/NOLOGIN
    FTP:X:14:50:FTP USER:/VAR/FTP:/SBIN/NOLOGIN
    [root@chyuanliuNJ awk]# sed -n '3,4s/[A-Z]/l&/g'p text.txt
    root:x:10
    root:x:10
    

     4.  awk 中使用外部shell变量

    5.  awk 合并一个文件

    #我有这样的需求,需要把两个文件中,第一列相同的行合并到同一行中。举个例子,有两个文件,内容如下
    cat 1.txt
    1 aa
    2 bb
    3 ee
    4 ss
    
    cat 2.txt
    1 ab
    2 cd
    3 ad
    4 bd
    5 de
    
    合并后的结果为:
    
    1 ab aa
    2 cd bb
    3 ad ee
    4 bd ss
    5 de
    
    [root@chyuanliuNJ awk]# awk '{if(NR==FNR){a[$1]=$2}};{if(NR>FNR){print $0,a[$1]}}'  1.txt  2.txt
    1 ab aa
    2 cd bb
    3 ad ee
    4 bd ss
    5 de
    

     6.  awk中gsub函数的使用

    #text.txt文件中把所有www替换为abc
    [root@chyuanliuNJ awk]# awk 'gsub(/www/,"abc")' text.txt
    abc:x:1002:1002::/home/abc:/bin/bash
    abc:x:1002:1002::/home/abc:/bin/bash
    
    #替换$1中的www为abc
    [root@chyuanliuNJ awk]# awk -F ':' '{OFS=":"} gsub(/www/,"abc",$1) {print $0}' text.txt
    abc:x:1002:1002::/home/www:/bin/bash
    abc:x:1002:1002::/home/www:/bin/bash
    

     7.  awk用print打印单引号

    awk '{print "This is a '"'"'"$1} filename 
    #在awk中使用脱义字符是起不到作用的,如果想打印特殊字符,只能使用'""' 这样的组合才可以。这里自左至右为单引号 双引号 双引号 单引号其中两个单引号为一对,两个双引号为一对。想脱义$那就是'"$"' 脱义单引号那就是 '"'"' 
    
    [root@chyuanliuNJ awk]# awk -F ':' 'NR<=5 {print "'"$"'"$1}' text.txt
    $root
    $root
    $ROOT
    $ROOT
    $Chy
    

    8.  合并两个文件

    #paste  filename1  filename2
    
    [root@chyuanliuNJ awk]# cat 1.txt
    1 aa
    2 bb
    3 ee
    4 ss
    [root@chyuanliuNJ awk]# cat 2.txt
    1 ab
    2 cd
    3 ad
    4 bd
    5 de
    [root@chyuanliuNJ awk]# paste 1.txt 2.txt
    1 aa    1 ab
    2 bb    2 cd
    3 ee    3 ad
    4 ss    4 bd
              5 de
    #如果想在两个文件连接处用一个指定的字符连接,还可以用-d来指定
    [root@chyuanliuNJ awk]# paste -d '++' 1.txt 2.txt
    1 aa+1 ab
    2 bb+2 cd
    3 ee+3 ad
    4 ss+4 bd
    +5 de
    

    9.  awk其他用法http://www.cnblogs.com/emanlee/p/3327576.html

    http://ask.apelearn.com/question/213 sed删除某关键字的下一行到最后一行

    http://ask.apelearn.com/question/199  awk 中使用外部shell变量

    http://ask.apelearn.com/question/266  把一个文件多行连成一行

    http://ask.apelearn.com/question/224  截取多个域为一行

    http://ask.apelearn.com/question/5494  用awk生成以下结构文件

  • 相关阅读:
    ADO.NET 根据实体类自动生成添加修改语句仅限Oracle使用
    C# 实体对象作为参数统一去除空格
    jQuery 前端复选框 全选 反选 下拉菜单联动
    C# 后台服务器端 Get 请求函数封装
    服务器404错误页面
    vue 封装公用函数
    Vue 生命周期
    Oracle 查看表结构
    ubuntu源配置
    外观(Facade)模式
  • 原文地址:https://www.cnblogs.com/chyuanliu/p/7891200.html
Copyright © 2011-2022 走看看