老男孩何老师-三剑客awk、sed骚操作

三剑客

awk、grep、sed

  1. awk概念介绍说明
    作用特点:

    1. 排除信息
    2. 查询信息
    3. 统计信息
    4. 替换信息
      语法格式:
      sed [参数] ‘条件-处理方式’ 文件
      awk [参数] ‘模式-动作’ 文件
  2. awk实际操作过程:
    准备测试环境
    [root@oldboyedu ~]# cat awk_test.txt
    Zhang Dandan 41117397 :250💯175
    Zhang Xiaoyu 390320151 :155:90:201
    Meng Feixue 80042789 :250:60:50
    Wu Waiwai 70271111 :250:80:75
    Liu Bingbing 41117483 :250💯175
    Wang Xiaoai 3515064655 :50:95:135
    Zi Gege 1986787350 :250:168:200
    Li Youjiu 918391635 :175:75:300
    Lao Nanhai 918391635 :250💯175

    命令查询信息方法:
    按照行号查询信息:
    awk ‘NR=2’ awk_test.txt
    [root@oldboyedu ~]# awk ‘NR=2’ awk_test.txt
    Zhang Dandan 41117397 :250💯175
    Zhang Xiaoyu 390320151 :155:90:201
    Meng Feixue 80042789 :250:60:50
    Wu Waiwai 70271111 :250:80:75
    Liu Bingbing 41117483 :250💯175
    Wang Xiaoai 3515064655 :50:95:135
    Zi Gege 1986787350 :250:168:200
    Li Youjiu 918391635 :175:75:300
    Lao Nanhai 918391635 :250💯175
    [root@oldboyedu ~]# awk ‘NR2’ awk_test.txt
    Zhang Xiaoyu 390320151 :155:90:201
    [root@oldboyedu ~]# awk 'NR
    2,NR4’ awk_test.txt
    Zhang Xiaoyu 390320151 :155:90:201
    Meng Feixue 80042789 :250:60:50
    Wu Waiwai 70271111 :250:80:75
    [root@oldboyedu ~]# awk 'NR
    2;NR==4’ awk_test.txt
    Zhang Xiaoyu 390320151 :155:90:201
    Wu Waiwai 70271111 :250:80:75

    ps: 在linux系统中
    oldboy=10 赋值变量信息
    oldboy==2 真正oldboy等于数值2

    按照字符查询信息:
    [root@oldboyedu ~]# awk ‘/Xiaoyu/’ awk_test.txt
    Zhang Xiaoyu 390320151 :155:90:201
    [root@oldboyedu ~]# awk ‘/Xiaoyu/,/Waiwai/’ awk_test.txt
    Zhang Xiaoyu 390320151 :155:90:201
    Meng Feixue 80042789 :250:60:50
    Wu Waiwai 70271111 :250:80:75
    [root@oldboyedu ~]# awk ‘/Xiaoyu/;/Waiwai/’ awk_test.txt
    Zhang Xiaoyu 390320151 :155:90:201
    Wu Waiwai 70271111 :250:80:75

    测验:

    1. 显示xiaoyu的姓氏和ID号码(???)
      [root@oldboyedu ~]# awk ‘/Xiaoyu/{print $1","$3}’ awk_test.txt
      Zhang,390320151
      [root@oldboyedu ~]# awk ‘/Xiaoyu/{print $1,$3}’ awk_test.txt
      Zhang 390320151

    2. 姓氏是zhang的人,显示他的第二次捐款金额及他的名字
      [root@oldboyedu ~]# awk ‘/Zhang/{print $4}’ awk_test.txt
      :250💯175
      :155:90:201
      [root@oldboyedu ~]# awk ‘/Zhang/{print $NF}’ awk_test.txt
      :250💯175
      :155:90:201
      [root@oldboyedu ~]# awk ‘/Zhang/{print $NF}’ awk_test.txt|awk -F “:” ‘{print $3}’
      100
      90

    awk ‘/Zhang/{print $NF}’
    awk -F “:” ‘{print $3}’
    [root@oldboyedu ~]# awk -F “:” ‘/^Zhang/{print $3}’ awk_test.txt
    100
    90

    [root@oldboyedu ~]# awk -F “[ :]+” ‘/^Zhang/{print $1,$2,$5}’ awk_test.txt
    Zhang Dandan 100
    Zhang Xiaoyu 90
    [root@oldboyedu ~]# awk -F “[ :]+” ‘/^Zhang/{print $1, 2 , 2, 2,(NF-1)}’ awk_test.txt
    Zhang Dandan 100
    Zhang Xiaoyu 90

    1. 显示所有以41开头的ID号码的人的全名和ID号码
      [root@oldboyedu ~]# awk ‘$3~/^41/{print $1,$2,$3}’ awk_test.txt
      Zhang Dandan 41117397
      Liu Bingbing 41117483

    2. 显示所有ID号码最后一位数字是1或5的人的全名
      方法一:
      awk ‘ 3   / 1 3~/1 3 /1|5$/{print $1,$2}’ awk_test.txt
      [root@oldboyedu ~]# awk ‘ 3   / 1 3~/1 3 /1|5$/{print $1,$2}’ awk_test.txt|column -t
      Zhang Xiaoyu
      Wu Waiwai
      Wang Xiaoai
      Li Youjiu
      Lao Nanhai
      Lao Nanhai

    方法二:
    [root@oldboyedu ~]# awk ‘ 3   / [ 15 ] 3~/[15] 3 /[15]/{print $1,$2}’ awk_test.txt|column -t

    方法三:
    [root@oldboyedu ~]# awk ‘ 3   / ( 1 ∣ 5 ) 3~/(1|5) 3 /(15)/{print $1,$2}’ awk_test.txt|column -t

    1. 显示Xiaoyu的捐款,每个捐款数值前面都有以$开头, 如$110$220$330
      [root@oldboyedu ~]# awk ‘$2~/Xiaoyu/{print $NF}’ awk_test.txt
      :155:90:201
      [root@oldboyedu ~]# #gsub(/需要替换的信息/,“修改成什么信息”,将哪列信息进行修改)
      [root@oldboyedu ~]# awk ‘KaTeX parse error: Expected '}', got 'EOF' at end of input: …oyu/{gsub(/:/,"",$NF);print $NF}’ awk_test.txt
      $155$90$201

    文件中空行进行排除/文件中注释信息进行排除
    grep -Ev "#|KaTeX parse error: Expected group after '^' at position 19: …文件信息 sed -n '/^̲#|^/!p’ 文件信息
    awk ‘/#|$/’
    [root@oldboyedu ~]# awk ‘KaTeX parse error: Expected group after '^' at position 4: 0~/^̲#|^/’ awk_test.txt
    #Liu Bingbing 41117483 :250💯175

    [root@oldboyedu ~]# awk ‘KaTeX parse error: Expected group after '^' at position 5: 0!~/^̲#|^/’ awk_test.txt
    Zhang Dandan 41117397 :250💯175
    Zhang Xiaoyu 390320151 :155:90:201
    Meng Feixue 80042789 :250:60:50
    Wu Waiwai 70271111 :250:80:75
    Wang Xiaoai 3515064655 :50:95:135
    Zi Gege 1986787350 :250:168:200
    Li Youjiu 918391635 :175:75:300
    Lao Nanhai 918391635 :250💯175
    Lao Nanhai 918394135 :250💯175

    总结:awk命令中$符号用法
    $1 $2 $3 : 取第几列信息
    $NF : 取最后一列
    $(NF-n) : 取倒数第几列
    $0 : 取所有列的信息

    如何利用awk取出IP地址信息:
    ip a s eth0|awk -F “[ /]+” ‘NR==3{print $5}’
    hostname -i

  3. awk高级功能说明
    a 对日志信息进行统计(计数)
    b 对日志信息数值进行求和 客户端-下载 服务端-上传 消耗网络流量
    c (数组)进行排序分析
    排序
    01 192.168.2.1 600 192 深圳 10万
    02 192.168.1.10 500 18 上海
    03 192.168.3.10 200 20 广州
    30 东北 2千
    运维总监—运营(推广)总监
    d 可以进行脚本编写(循环语句 判断语句) sh awk_nginx.log

    awk模式概念说明: 匹配的条件信息
    普通的模式:

    1. 正则表达式作为模式
      awk ‘/^oldboy/{print xx}’
    2. 利用比较匹配信息
      NR==2
      NR>=2
      NR<=2
    3. NR2,NR10
      特殊的模式
      BEGIN{} 在awk执行命令前做什么事情:
      [root@oldboyedu ~]# awk ‘BEGIN{print “姓”,“名”,“QQ号”,“捐款记录”}{print $0}’ awk_test.txt |column -t
      姓 名 QQ号 捐款记录
      Zhang Dandan 41117397 :250💯175
      Zhang Xiaoyu 390320151 :155:90:201
      Meng Feixue 80042789 :250:60:50
      Wu Waiwai 70271111 :250:80:75
      Liu Bingbing 41117483 :250💯175
      Wang Xiaoai 3515064655 :50:95:135
      Zi Gege 1986787350 :250:168:200
      Li Youjiu 918391635 :175:75:300
      Lao Nanhai 918391635 :250💯175
      Lao Nanhai 918394135 :250💯175

    修改内置分隔符变量
    awk -F “:” ‘{print $2}’ awk_test.txt
    [root@oldboyedu ~]# awk ‘BEGIN{FS=":"}{print $2}’ awk_test.txt

    END{} 在awk执行命令结束之后做的操作
    [root@oldboyedu ~]# awk ‘BEGIN{print “姓”,“名”,“QQ号”,“捐款记录”}{print $0}END{print “操作结束”}’ awk_test.txt |column -t
    姓 名 QQ号 捐款记录
    Zhang Dandan 41117397 :250💯175
    Zhang Xiaoyu 390320151 :155:90:201
    Meng Feixue 80042789 :250:60:50
    Wu Waiwai 70271111 :250:80:75
    Liu Bingbing 41117483 :250💯175
    Wang Xiaoai 3515064655 :50:95:135
    Zi Gege 1986787350 :250:168:200
    Li Youjiu 918391635 :175:75:300
    Lao Nanhai 918391635 :250💯175
    Lao Nanhai 918394135 :250💯175
    操作结束

    统计累加运算测试:
    [root@oldboyedu ~]# awk ‘/^KaTeX parse error: Expected 'EOF', got '#' at position 185: …ot@oldboyedu ~]#̲ awk '/^/{i=i+1}END{print i}’ /etc/services
    17

    1. 统计/etc/services文件中有井号开头的行
      awk ‘/^#/{i++}END{print i}’ /etc/services

    2. 统计系统中有多少个虚拟用户 普通用户
      第一个历程: 用户信息都保存在什么文件中了
      用户信息保存文件: /etc/passwd
      第二个历程: 从文件中匹配出虚拟用户 普通用户
      匹配普通用户
      awk ‘ N F   / b a s h / ′ / e t c / p a s s w d a w k ′ NF~/bash/' /etc/passwd awk ' NF /bash//etc/passwdawkNF~//bin/bash/’ /etc/passwd
      第三个历程: 进行统计
      普通用户数量
      [root@oldboyedu ~]# awk ‘KaTeX parse error: Expected 'EOF', got '#' at position 71: …ot@oldboyedu ~]#̲ awk 'NF!~/bash/{i=i+1}END{print i}’ /etc/passwd
      22

    求和运算:
    sum=sum+$n(需要进行数值求和的列)
    [root@oldboyedu ~]# seq 10|awk ‘{sum=sum+$1;print sum}’
    1 sum=sum+$1 0+1 sum=1
    2 sum=sum+$1 1+2 sum=3
    3 sum=sum+$1 3+3 sum=6
    4 6+4 sum=10
    5 10+5 sum=15
    6 15+6 sum=21
    7 28
    8 36
    9 45
    10 45+10 sum=55

  4. 课程知识回顾

    1. 正则符号
      基础正则符号:
      ^ 以什么开头的信息进行匹配 ^oldboy
      $ 以什么结尾的信息进行匹配 oldboy$
      ^$ 表示匹配空行信息
      . 匹配任意一个且只有一个字符 grep “.”
    • 匹配前一个字符连续出现0次或者多次
      .* 匹配所有任意信息 类似于通配符*
      \ 将有意义的字符信息,转义成普通字符进行识别
      –> 找出文件中以点结尾的信息
      将特殊的扩展正则符号,转换成基础正则符号
      将没有意义的字符信息转成有意义的字符
      \n \r \t
      [] 匹配多个字符信息,多个字符匹配时,是或者的关系
      [ok] 在文件中找有O的字符信息 找文件中有k的字符信息
      PS: 将一个字符串信息,进行拆分成一个一个的字符进行匹配
      [^] 对匹配的字符信息进行排除
      [^ok] 在文件中找有O的字符信息 找文件中有k的字符信息,进行排除不要显示,显示其他信息
      [ok]

    扩展正则符号:

    • 匹配前一个字符连续出现1次或者多次
      | 利用竖线可以匹配多个字符串信息
      () 将多个字符信息汇总成整体,进行过滤
      进行后项引用前项 (oldboy) \1–sed
      {} 指定匹配前一个字符连续出现了多少次
      {n,m} 至少连续n次,最多连续m次
      {n} 匹配只连续n次的信息
      {n,} 至少连续n次,最多不限
      {,m} 至少连续0次,最多m次
      ? 匹配前一个字符连续出现0次或者1次

    grep命令识别扩展正则: egrep -E
    sed命令识别扩展正则: sed -r

    学生问题:

    1. 文件中有\撬棍信息,如何进行过滤
      [root@oldboyedu ~]# grep ‘\’ oldboy_test.txt
      I \teach \linux.
    2. 文件中有KaTeX parse error: Expected 'EOF', got '#' at position 39: …ot@oldboyedu ~]#̲ grep 'oldgirl’ oldboy_test.txt
      $oldgirl
      [root@oldboyedu ~]# grep “$oldgirl” oldboy_test.txt
      $oldgirl
  5. sed命令概述说明:
    sed命令: 字符流编辑工具(行编辑工具)==按照每行中的字符进行处理操作
    PS: 全屏编辑工具 vi/vim

    sed命令作用说明:
    1). 擅长对行进行操作处理
    2). 擅长将文件的内容信息进行修改调整/删除
    编写脚本: 修改文件内容信息时
    网络服务中的IP地址进行修改: 50台主机迁移机房–新机房
    第一个步骤: vi ifcfg-eth0
    第二个步骤: 重启网络服务
    第三个步骤: 检查测试

    自动修改网卡地址脚本:
    第一个步骤: 修改地址
    sed -i “s#10.0.0.200#10.0.0.201#g” ifcfg-eth0

    第二个步骤: 重启网络服务
    systemctl restart network

    第三个步骤: 过滤ip a s eth0 网卡地址信息存储到一个文件中 共享存储

    具体功能作用:

    1. 文件中添加信息的能力 (增) ok
    2. 文件中删除信息的能力 (删) ok
    3. 文件中修改信息的能力 (改)
    4. 文件中查询信息的能力 (查) OK
  6. sed命令的语法信息
    sed [OPTION]… {script-only-if-no-other-script} [input-file]…
    命令 参数 条件+处理= (指令) 处理文件信息

    显示出文件中有oldboy行的信息
    sed -n ‘/oldboy/p’ oldboy.txt

  7. sed命令执行原理
    参见原理图

  8. sed命令实践操作:
    创建测试环境:
    cat >person.txt<<EOF
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    EOF

    a sed命令查询信息方法
    根据文件内容的行号进行查询:
    测试1: 显示单行信息
    [root@oldboyedu ~]# sed -n ‘3p’ person.txt
    103,Alex,COO
    测试2: 根据行号信息,输出多行内容(连续)
    [root@oldboyedu ~]# sed -n ‘1,3p’ person.txt
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    测试3: 根据行号信息,输出多行内容(不连续)
    [root@oldboyedu ~]# sed -n ‘1p;3p’ person.txt
    101,oldboy,CEO
    103,Alex,COO

    根据文件内容的信息进行查询:
    测试1: 根据内容信息,输出单行内容
    #将有oldboy行的信息找出来
    [root@oldboyedu ~]# sed -n ‘/oldboy/p’ person.txt
    101,oldboy,CEO

    测试2: 根据内容信息,输出多行内容(连续)
    #将有oldboy到alex行的信息都输出出来
    [root@oldboyedu ~]# sed -n ‘/oldboy/,/Alex/p’ person.txt
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO

    测试3: 根据内容信息,输出多行内容(不连续)
    #将有oldboy和alex行的信息都输出出来
    [root@oldboyedu ~]# sed -n ‘/oldboy/p;/Alex/p’ person.txt
    101,oldboy,CEO
    103,Alex,COO
    106,oldboy,CIO

    b sed命令添加信息方法
    在文件第一行添加信息:
    1:第一行
    i:第一行前插入
    100,oldgirl,UFO
    [root@oldboyedu ~]# sed ‘1i100,oldgirl,UFO’ person.txt
    100,oldgirl,UFO
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO

    在文件最后一行添加信息:
    [root@oldboyedu ~]# sed ‘$a108,oldgirl,UFO’ person.txt
    100,oldgirl,UFO
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO
    108,oldgirl,UFO

    测试:

    1. 在第三行后面添加oldboy.txt信息
      sed ‘3aoldboy.txt’ person.txt
    2. 在第二行前面添加oldboy.txt信息
      sed ‘2ioldboy.txt’ person.txt
    3. 在有oldboy行的前面添加oldgirl 后面添加olddog信息
      sed -e ‘/oldboy/ioldgirl’ -e ‘/oldboy/aolddog’ person.txt

    [root@kafka-01 sed]# sed ‘/oldboy/iwangyi’ person.txt
    wangyi
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO

    -e:根据多个条件筛选
    [root@oldboyedu ~]# sed -e ‘/oldboy/ioldgirl’ -e ‘/oldboy/aolddog’ person.txt
    100,oldgirl,UFO
    oldgirl
    101,oldboy,CEO
    olddog
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    oldgirl
    106,oldboy,CIO
    olddog

    sed ‘$a100\n101’ person.txt 添加多行信息
    企业中编写配置文件:
    IPaddress=10.10.10.1
    mask=255.255.255.0
    gateway=10.10.10.254

    sed ‘$aIPaddress=10.10.10.1\nmask=255.255.255.0\ngateway=10.10.10.254’ 文件名称

    c sed命令删除信息方法
    练习:

    1. 删除单行信息
      [root@oldboyedu ~]# #删除文件中第三行信息
      [root@oldboyedu ~]# sed ‘3d’ person.txt
      100,oldgirl,UFO
      101,oldboy,CEO
      103,Alex,COO
      104,yy,CFO
      105,feixue,CIO
      106,oldboy,CIO

    2. 删除多行信息
      [root@oldboyedu ~]# #删除文件中第二行到第六行内容
      [root@oldboyedu ~]# sed ‘2,6d’ person.txt
      100,oldgirl,UFO
      106,oldboy,CIO

    测试:

    1. 删除有oldboy信息的行
      sed ‘/oldboy/d’ person.txt

    2. 删除第三行和第六行
      [root@oldboyedu ~]# #删除文件中第二行到第六行内容
      [root@oldboyedu ~]# sed ‘2,6d’ person.txt
      100,oldgirl,UFO
      106,oldboy,CIO

    [root@oldboyedu ~]# sed ‘3d;6d’ person.txt
    100,oldgirl,UFO
    101,oldboy,CEO
    103,Alex,COO
    104,yy,CFO
    106,oldboy,CIO

    问题: 如何利用sed命令取消空行显示
    [root@oldboyedu ~]# sed -n ‘/./p’ person.txt
    100,oldgirl,UFO
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO

    [root@oldboyedu ~]# sed ‘/^$/d’ person.txt
    100,oldgirl,UFO
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO

    [root@oldboyedu ~]# sed -n ‘/^$/!p’ person.txt
    100,oldgirl,UFO
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO

    d sed命令修改信息方法

    sed ‘s#原有内容#修改后内容#g’ 文件信息
    [root@oldboyedu ~]# sed ‘s##oldgirl#old#g’ person.txt
    sed: -e expression #1, char 12: unknown option to `s’
    [root@oldboyedu ~]# sed ‘s/#oldgirl/old/g’ person.txt
    100,old,UFO

    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO

    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO

    sed ‘s#()#\n#g’ 文件信息 后项引用前项进行替换修改
    利用sed命令取出IP地址信息:
    第一个历程: 取出有IP地址的行
    [root@oldboyedu ~]# ip a s eth0|sed -n ‘3p’
    inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0

    第二个历程: 取出IP地址
    [root@oldboyedu ~]# ip a s eth0|sed -n ‘3p’|sed -r ‘s#^.net (.)#\1#g’
    10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
    [root@oldboyedu ~]# ip a s eth0|sed -n ‘3p’|sed -r ‘s#^.net (.)#\1#g’|sed -r ‘s#(.)/24.#\1#g’
    10.0.0.200

    sed -r ‘s#^.net (.)#\1#g’|sed -r ‘s#(.)/24.#\1#g’ 进行整合
    ip a s eth0|sed -n ‘3p’|sed -r ‘s#^.net (.)/24.*#\1#g’

    sed -n ‘3p’|sed -r ‘s#^.net (.)/24.*#\1#g’ 进行整合

    sed -n ‘3 p’
    sed -r ‘s#^.net (.)/24.#\1#g’
    sed -rn '3s#^.net (.)/24.
    #\1#gp’
    最终取IP地址方法
    [root@oldboyedu ~]# ip a s eth0|sed -rn ‘3s#^.net (.)/24.*#\1#gp’
    10.0.0.200

    补充01: 修改文件内容直接进行自动备份
    [root@oldboyedu ~]# sed -i.bak ‘s#oldboy#oldold#g’ person.txt
    [root@oldboyedu ~]# ll person.txt.bak
    -rw-r–r--. 1 root root 104 Oct 10 11:40 person.txt.bak
    [root@oldboyedu ~]# cat person.txt.bak
    100,#oldgirl,UFO

    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO

    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO

    补充02: 在真实替换文件内容时候,一定不能让n和i参数同时出现
    [root@oldboyedu ~]# sed -ni ‘s#Alex#aaaa#gp’ person.txt
    103,aaaa,COO
    [root@oldboyedu ~]# cat person.txt
    103,aaaa,COO
    说明: ni和参数同时使用,会将文件内容进行清空

    测验替换功能:
    创建测试环境:
    -rw-r–r--. 1 root root 0 Oct 10 02:10 oldboy01.txt
    -rw-r–r--. 1 root root 0 Oct 10 02:10 oldboy02.txt
    -rw-r–r--. 1 root root 0 Oct 10 02:10 oldboy03.txt
    -rw-r–r--. 1 root root 0 Oct 10 02:10 oldboy04.txt
    -rw-r–r--. 1 root root 0 Oct 10 02:10 oldboy05.txt
    -rw-r–r--. 1 root root 0 Oct 10 02:10 oldboy06.txt
    -rw-r–r--. 1 root root 0 Oct 10 02:10 oldboy07.txt
    -rw-r–r--. 1 root root 0 Oct 10 02:10 oldboy08.txt
    -rw-r–r--. 1 root root 0 Oct 10 02:10 oldboy09.txt
    -rw-r–r--. 1 root root 0 Oct 10 02:10 oldboy10.txt
    批量修改文件的扩展名称 将oldboyxx.txt扩展名修改为oldboyxx.jpg

    [root@oldboyedu oldboy]# ls oldboy*.txt|sed -r 's#(.)txt#mv & \1jpg#g’
    mv oldboy01.txt oldboy01.jpg
    mv oldboy02.txt oldboy02.jpg
    mv oldboy03.txt oldboy03.jpg
    mv oldboy04.txt oldboy04.jpg
    mv oldboy05.txt oldboy05.jpg
    mv oldboy06.txt oldboy06.jpg
    mv oldboy07.txt oldboy07.jpg
    mv oldboy08.txt oldboy08.jpg
    mv oldboy09.txt oldboy09.jpg
    mv oldboy10.txt oldboy10.jpg
    mv oldboy.txt oldboy.jpg
    [root@oldboyedu oldboy]# ls oldboy
    .txt|sed -r ‘s#(.*)txt#mv & \1jpg#g’|bash

    批量重命名专业命令: rename
    rename .txt .jpg oldboy*.txt
    命令 文件名称需要修改的部分信息 修改成什么信息 将什么样的文件进行修改

    [root@oldboyedu ~]# cat person.txt|sed -i ‘s#COO#CEO#g’
    sed: no input files
    [root@oldboyedu ~]# sed -i ‘s#COO#CEO#g’ person.txt

    文件中添加内容方法:

    1. vim/vi
    2. cat >>xxx<EOF … EOF
    3. echo -e “xxx\nxxx”
    4. sed ‘na/i xxxx\nxxxx\nsxxxx’

    总结: sed命令的指令信息
    p print 输出信息
    i insert 插入信息,在指定信息前面插入新的信息
    a append 附加信息,在指定信息后面附加新的信息
    d delete 删除指定信息
    s substitute 替换信息 s###g(全局替换)
    c 替换修改指定的一整行信息
    [root@oldboyedu ~]# sed ‘2coldboyedu-sz-01’ person.txt
    103,aaaa,CEO
    oldboyedu-sz-01

    总结: sed命令的参数信息
    -n 取消默认输出
    -r 识别扩展正则
    -i 真实编辑文件(将内存中的信息覆盖到磁盘中)
    -e 识别sed命令多个操作指令

[root@oldboyedu ~]# vim oldboy_test02.txt
张三110105199004067631
李四104105199004067631
赵六 oLdboy
王五104105199004067631

grep
-o 表示单个输出或者连续输出
[root@oldboyedu ~]# grep “[0-9]” oldboy_test02.txt -o
1
1
0
1
。。。
1

#+是拓展正则里面的符号,表示匹配一次或多次
#-o表示连续输出
[root@oldboyedu ~]# grep -E “[0-9]+” oldboy_test02.txt -o 110105199004067631
104105199004067631
104105199004067631

sed

sed -r???

i:行前插入
a:行后插入
-e识别sed命令多个操作指令

在有o1dboy行的前面添加o1dgirl后面添加o1ddog信息
sed -e ’/oldboy/ioldgirl’ -e ‘/oldboy/aolddog’ person.txt

#\1表示引用()里的内容
[rootgoldboyedu~]# ip a s eth0lsed -n ‘3p’ l sed -r ‘s#".net (.)#\1#g’ 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0

#利用sed改之前先备份
[rootgoldboyedu~]# sed -i.bak ‘s#oldboy#oldoldfg’ person.txt [rootgoldboyedu ~]# 11 person.txt.bak
-rW-r–r--.1 root root 104 0ct 10 11:40 person.txt.bak

&:表示引用管道符前面的结果信息
[rootloldboyedu oldboy]# ls oldboy*.txt l sed -r ‘s#(.*)txt#mv & \1jpg#g’
mv oldboy01.txt oldboy01.jpg
my oldboy02.txt oldboy02.jpg
my oldboy03.txt oldboy03.jpg
my oldboy04.txt oldboy04.jpg
my oldboy05.txt oldboy05.jpg
my oldboy06.txt oldboy06.jpg
my oldboy07.txt oldboy07.jpg
mV oldboy08.txt oldboy08.jpg
my oldboy09.txt oldboy09.jpg
my oldboy10.txt oldboy10.jpg
mv oldboy.txt oldboy.jpg

awk

以:和空格做分割符,防止连续:和空格导致输出空值
[root@oldboyedu~]#awk -F “[ :]+” ‘/^Zhang/{print $1,$2,$5}’ awk_test.txt
Zhang Dandan 100
Zhang Xiaoyu 90

显示第三列以41开头的ID号码的人的全名和ID号码 [root@oldboyedu~]#awk ‘$3~/^41/{print $1,$2,$3}’ awk_test.txt
Zhang Dandan 41117397
Liu Bingbing 41117483

BEGIN{}在ak执行命令前显示表头
[rooteoldboyedu ~]#awk ‘BEGIM{print"姓",“名",Qg号",”捐款记录"}{print $0}’ awk_test.txt Icolumn -t
姓 名 QQ号 捐款记录
Zhang Dandan 41117397 :250💯175
Zhang Xiaoyu 390320151 :155:90:201

column -t:表示每一列自动对齐

[root@oldboyedu~]#awk -F “:” ‘{print $2}’ awk_ test.txt
250
155
[rootQoldboyedu~]#awk ‘BEGIN{FS=":"}{print $2}’ awk_test,txt
250
155

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值