文本处理三剑客 (初识篇)

一、sed

sed对比vim

1、sed可以把处理文件的规则事先写好,然后用同一套规则编辑多个文件

      而vim只能一个个编辑

2、sed处理文件,一次只处理一行,即同一时间内存中只有文件的一行内容

      无论文件多大,都不会对内存造成过大的压力===》用于处理大文件

      如何用sed

什么是sed?

  sed======》流式编辑器

  命令格式:

   sed 选项 ‘规则’ 文件路径

     选项 : -i(改变流向输出,把输出到屏幕中的内容:规则处理的结果+默认输出的结果)

               -n(取消默认输出)

     命令:d (删除)

                p   (整行)

     规则:定位+命令

               定位方式:

                     行号定位

                     [root@@321 ~]# sed -n '1p' 2.txt (其中-n取消了默认输出,‘1p’为指定文件内第一行内容)
                     root:x:0:0:root:/root:/bin/bash
                   

                     [root@@321 ~]# sed -n '1,3p' 2.txt  (‘1,3p’为指定文件一到三行内容)
                     root:x:0:0:root:/root:/bin/bash
                     bin:x:1:1:bin:/bin:/sbin/nologin
                     daemon:x:2:2:daemon:/sbin:/sbin/nologin

                     [root@@321 ~]# sed -n '2p;5p' 2.txt(‘2p;5p’为指定行数为第二行和第五行) 
                     bin:x:1:1:bin:/bin:/sbin/nologin
                     lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
 

                正则定位

                      [root@@321 ~]# sed 's/^root/666/g' 2.txt(通过///定位到以root开头的行把root换成666) 
                      666:x:0:0:root:/root:/bin/bash
                  如果没有定位代表定位所有行

二、awk

          主要擅长处理有规律的文本,主要用于做一些格式化处理

           规则:定位+命令

                 定位:

                       行号定位

                        NR==1  行号定位

                        [root@@321 ~]# sed -n '1p' 2.txt 
                        root:x:0:0:root:/root:/bin/bash
                        [root@@321 ~]# awk -F: 'NR==1{print $7}' 2.txt (-F是指定分隔符为‘:’ print 打印,$7是指定的第七小                          /bin/bash                                                                  段)

                        [root@@321 ~]# sed -n '1p;3p' 2.txt 
                        root:x:0:0:root:/root:/bin/bash
                        daemon:x:2:2:daemon:/sbin:/sbin/nologin
                        [root@@321 ~]# awk -F: 'NR==1 || NR==3{print $2,$7}' 2.txt (|| 是或者用来连接两个行号定位,分别取
                        x /bin/bash                                                                                   第一行和第三行第2和第7小段
                        x /sbin/nologin

                        [root@@321 ~]# sed -n '3,5p' 2.txt 
                        daemon:x:2:2:daemon:/sbin:/sbin/nologin
                        adm:x:3:4:adm:/var/adm:/sbin/nologin
                        lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
                        [root@@321 ~]# awk -F: 'NR>=3 && NR<=5{print $3,$7}' 2.txt (&&表示并且,取行范围是三到
                        2 /sbin/nologin                                                                                 行并且取这三行内第三和第七小段
                        3 /sbin/nologin                                                                                 的内容)
                        4 /sbin/nologin
                         [root@@321 ~]# awk -F"/" 'NR==5{print $(NF-1)}' 2.txt  (NF是符号分割后行的长度)
                         sbin

                       正则定位
                         [root@@321 ~]# sed -n '1p' 2.txt 
                         root:x:0:0:root:/root:/bin/bash
                         [root@@321 ~]# awk -F: '$1 ~ /root/{print $0}' 2.txt ($1在这个位置代表第一段有root就把整行打印下
                         root:x:0:0:root:/root:/bin/bash                                         来)
                  

三、grep

   擅长过滤

   命令

   grep 选项 “过滤规则” 文件

          [root@@321 A]# touch {1..8}.txt(创建了1-8这八个文件夹)
          [root@@321 A]# ls
          1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt
          [root@@321 A]# vimdiff -O 1.txt 7.txt-O左右分屏,在1.txt和7.txt两个文件里编辑了“root”并保存) 
          还有 2 个文件等待编辑
          [root@@321 A]# grep -rn "root"(用grep过虑带有root的文件其中 -r 是递归着扫描当前文件夹及其下的所有子文
          1.txt:1:root                                     文夹 -n 是显示行号)-r通常不会单独使用(-i 是忽略大小写  -l 如果文件中但凡

          7.txt:1:root                                     是存在 "root" 行就算过滤成功,会返回文件名)

 
        [root@@321 /]# ps aux  查看进程池
        [root@@321 /]# ps aux | grep "[s]sh"( | 管道符号,把前面的命令结果丢到管道内,后面的命令再从管道内取
        root       6810  0.0  0.4 112756  4308 ?        Ss   08:24   0:00 /usr/sbin/sshd -D          出然后执行。grep过滤出ssh
        root       8117  0.0  0.6 161364  6068 ?        Ss   13:19   0:01 sshd: root@pts/1          相关的进程)
        root       8833  0.0  0.6 161364  6064 ?        Ss   15:44   0:00 sshd: root@pts/0
        [root@@321 /]# kill -9 8117    (直接杀掉当前号码的进程

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值