一、cut (cut 命令可以从一个文本文件或者文本流中提取文本列 )

1、cut语法

cut -d '分隔字符' -f fields         用于有特定分隔字符

cut  -c 字符区间                    用于排列整齐的信息

选项与参数:
             -d:后面接分隔字符。与 -f 一起使用
             -f:依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思
             -c:以字符 (characters) 的单位取出固定字符区间

2、例:

echo $PATH            /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

将 PATH 变量取出,找出第五个路径      echo $PATH | cut -d ':' -f 5                    /usr/sbin

将 PATH 变量取出,找出第三和第五个路径         echo $PATH | cut -d ':' -f 3,5                  /sbin:/usr/sbin

将 PATH 变量取出,找出第三到最后一个路径          echo $PATH | cut -d ':' -f 3-                  /sbin:/bin:/usr/sbin:/usr/bin:/root/bin

将 PATH 变量取出,找出第一到第三,还有第五个路径        echo $PATH | cut -d ':' -f 1-3,5          /usr/local/sbin:/usr/local/bin:/sbin:/usr/sbin

3、例

先准备已空格分开的这么段数据:
              huangbo 18 jiangxi
              xuzheng 22 hunan
              wangbaoqiang 44 liujiayao

获取中间的年龄: cut -f 2 -d ' ' sutdent.txt

18
             22
             44

获取第二个字符到第三个字符之间的字符:cut -c 2-3 sutdent.txt

ua
              uz
              an

二、grep

1、基本使用

查询包含hadoop的行      grep  hadoop  /etc/password

grep hadoop ./*.txt ## 寻找当前路径下的所有 txt 当中内容那些是带了 huangbo 字符串的

./mazhonghua.txt:my name is huangbo is is huangbo
                      ./sutdent.txt:huangbo 18 jiangxi

2、cut 截取以:分割保留第七段

grep hadoop /etc/passwd | cut -d: -f 7                                 /bin/bash

3、 查询不包含 hadoop 的行
              grep -v hadoop /etc/passwd

4、 正则表达包含 oo
              grep '.*oo.*' /etc/passwd
                         root:x:0:0:root:/root:/bin/bash
                         lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
                         mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
                         uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

5、 正则表达(点代表任意一个字符)          grep 'h.*p' /etc/passwd

6、 正则表达以 hadoop 开头                 grep '^hadoop' /etc/passwd

7、 正则表达以 hadoop 结尾                  grep 'hadoop$' /etc/passwd

正则表达式的简单规则:
                         . : 任意一个字符
                       a* : 任意多个 a(零个或多个 a)
                       a? : 零个或一个 a
                      a+ : 一个或多个 a
                       .* : 任意多个任意字符
                       \. : 转义.
                o\{2\} : o 重复两次

8、查找不是以#开头的行       grep -v '^#' a.txt | grep -v '^$'              ( '^$'代表空行)

hua$
                     liu
                     de

grep -v '^#' huangbo.txt

hua$
                    liu

de

9、以 h 或 r 开头的            grep '^[hr]' /etc/passwd

不是以 h 和 r 开头的       grep '^[^hr]' /etc/passwd
                不是以 h 到 r 开头的      grep '^[^h-r]' /etc/passwd

三、sed 命令

1、 删除: d 命令
            sed '2d' huangbo.txt -----删除 huangbo.txt 文件的第二行。
            sed '2,$d' huangbo.txt -----删除 huangbo.txt 文件的第二行到末尾所有行。
            sed '$d' huangbo.txt -----删除 huangbo.txt 文件的最后一行。
            sed '/test/'d huangbo.txt -----删除 huangbo.txt 文件所有包含 test 的行。

2、 替换: s 命令
            sed 's/test/mytest/g' huangbo.txt      ## 在整行范围内把 test 替换为 mytest。如果没有 g 标记,则只有每行第一个匹配的 test 被替换成 mytest。
            sed -n 's/^test/mytest/p' huangbo.txt      ## (-n)选项和 p 标志一起使用表示只打印那些发生替换的行。也就是说,如果某一行开头 的 test 被替换成 mytest,就打印它。
            sed 's/^192.168.0.1/&localhost/' huangbo.txt
            sed -n 's/4444444/&test/gp' huangbo.txt      ## &符号表示追加一个串到找到的串后。所有以 192.168.0.1 开头的行都会被替换成它自已 加 localhost,变成 192.168.0.1localhost。

sed -n 's/\(love\)able/\1rs/p' huangbo.txt
            sed -n 's/\(wang\)www/\1test/p' huangbo.txt         ## love 被标记为 1,所有 loveable 会被替换成 lovers,而且替换的行会被打印出来。

sed 's#10#100#g' huangbo.txt                             ## 不论什么字符,紧跟着 s 命令的都被认为是新的分隔符,所以,“ #”在这里是分隔符, 代替了默认的“ /”分隔符。表示把所有 10 替换成 100。

选定行的范围:逗号
            sed -n '/test/,/check/p' huangbo.txt
            sed -n 's#4444444#bbbbbbb#gp' huangbo.txt        ## 所有在模板 test 和 check 所确定的范围内的行都被打印。

sed -n '5,/^test/p' huangbo.txt                  ## 打印从第五行开始到第一个包含以 test 开始的行之间的所有行。

sed '/test/,/check/s/$/sed test/' huangbo.txt         ## 对于模板 test 和 west 之间的行,每行的末尾用字符串 sed test 替换。
            多点编辑: e 命令
            sed -e '1,5d' -e 's/test/check/' huangbo.txt           ## (-e)选项允许在同一行里执行多条命令。如例子所示,第一条命令删除 1 至 5 行,第二 条命令用 check 替换 test。命令的执行顺序对结果有影响。如果两个命令都是替换命令,那 么第一个替换命令将影响第二个替换命令的结果。

sed --expression='s/test/check/' --expression='/love/d' huangbo.txt        ## 一个比-e 更好的命令是--expression。它能给 sed 表达式赋值。

3、 从文件读入: r 命令
           sed '/test/r file' huangbo.txt        -----file 里的内容被读进来,显示在与 test 匹配的行下面,如果匹配多行,则 file 的内容将显 示在所有匹配行的下面。
 
       4、 写入文件: w 命令
           sed -n '/test/w file' huangbo.txt         -----在 huangbo.txt 中所有包含 test 的行都被写入 file 里。

5、 追加命令: a 命令
          sed '/^test/a\\--->this is a example' huangbo.txt        ## '--->this is a example'被追加到以 test 开头的行(另起一行)后面, sed 要求命令 a 后面有一 个反斜杠。
       6、 插入: i 命令
         sed '/test/i\\some thing new -------------------------' huangbo.txt      如果 test 被匹配,则把反斜杠后面的文本插入到匹配行的前面。
       7、 下一个: n 命令
         sed '/test/{ n; s/aa/bb/; }' huangbo.txt     -----如果 test 被匹配,则移动到匹配行的下一行,替换这一行的 aa,变为 bb,并打印该行, 然后继续。

8、 退出: q 命令
         sed '10q' huangbo.txt         -----打印完第 10 行后,退出 sed。 
四、AWK

awk 是一个强大的文本分析工具,相对于 grep 的查找, sed 的编辑, awk 在其对数据分析并  生成报告时,显得尤为强大。简单来说 awk 就是把文件逐行的读入,以空格为默认分隔符 将每行切片,切开的部分再进行各种分析处理。 
    1、假设 last -n 5的输出如下

root pts/0 192.168.123.1 Wed Dec 28 01:55 still logged in
reboot system boot 2.6.32-573.el6.x Tue Dec 27 04:25 - 03:11 (22:46)
root pts/1 192.168.123.1 Tue Dec 27 02:00 - 02:00 (00:00)
root pts/1 192.168.123.1 Tue Dec 27 01:59 - 02:00 (00:00)
root pts/0 192.168.123.1 Tue Dec 27 01:59 - down (00:16)

2、只显示5个最近登录的账号           last -n 5 | awk '{print $1}'

root
reboot
root
root
root

awk 工作流程是这样的:读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符 划分域,填充域, $0 则表示所有域,$1 表示第一个域,$n 表示第 n 个域。默认域分隔符是"空 白键" 或 "[tab]键",所以$1 表示登录用户, $3 表示登录用户 ip,以此类推
   3、 显示/etc/passwd 的账户:   cat /etc/passwd |awk -F ':' '{print $1}'

root
bin
daemon
adm
lp
这种是 awk+action 的示例,每行都会执行 action{print $1}。   -F 指定域分隔符为':'
   4、显示/etc/passwd 的账户和账户对应的 shell,而账户与 shell 之间以 tab 键分割                 cat /etc/passwd |awk -F ':' '{print $1"\t"$7}'

root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin

5、 如果只是显示/etc/passwd 的账户和账户对应的 shell,而账户与 shell 之间以逗号分割,而且 在所有行添加列名 name,shell,在最后一行添加"blue,/bin/nosh"。

cat /etc/passwd |awk -F ':' 'BEGIN {print "name,shell"} {print $1","$7} END {print "blue,/bin/nosh"}'
cat /etc/passwd | awk -F ':' 'BEGIN {print "name \t shell"} {print$1"\t"$7} END {print "blue,/bin/bash"}'
    结果:

name,shell
root,/bin/bash
daemon,/bin/sh
bin,/bin/sh
sys,/bin/sh
....
blue,/bin/nosh

awk 工作流程是这样的:先执行 BEGING,然后读取文件,读入有/n 换行符分割的一条记录, 然后将记录按指定的域分隔符划分域,填充域, $0 则表示所有域,$1 表示第一个域,$n 表示 第 n 个域,随后开始执行模式所对应的动作 action。接着开始读入第二条记录•直到所有的记
录都读完,最后执行 END 操作。

6、搜索/etc/passwd 有 root 关键字的所有行           awk -F: '/root/' /etc/passwd

root:x:0:0:root:/root:/bin/bash
这种是 pattern的使用示例,匹配了 pattern(这里是 root)的行才会执行 action(没有指定 action, 默认输出每行的内容)。
    7、搜索支持正则,例如找 root 开头的: awk -F: '/^root/' /etc/passwd
搜索/etc/passwd 有 root 关键字的所有行,并显示对应的 shell
awk -F':' '/root/{print $7}' /etc/passwd
/bin/bash
这里指定了 action{print $7}

8、统计/etc/passwd:文件名,每行的行号,每行的列数,对应的完整行内容:

awk -F ':' '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd

awk -F':' '{print "filename:" FILENAME ",linenumber:" NR ",colums:" NF "linecotent:" $0}' /etc/passwd
      结果:

filename:/etc/passwd,linenumber:1,columns:7,linecontent:root:x:0:0:root:/root:/bin/bash
filename:/etc/passwd,linenumber:2,columns:7,linecontent:daemon:x:1:1:daemon:/usr/sbin:/bin/sh
filename:/etc/passwd,linenumber:3,columns:7,linecontent:bin:x:2:2:bin:/bin:/bin/sh
filename:/etc/passwd,linenumber:4,columns:7,linecontent:sys:x:3:3:sys:/dev:/bin/sh

使用 printf 替代 print,可以让代码更加简洁,易读 
awk -F ':'  '{printf("filename:%s,linenumber:%s,columns:%s,linecontent:%s\n",FILENAME,NR,NF,$0)}'    /etc/passwd

Linux(三)高级文本处理命令的更多相关文章

  1. Linux学习之文本处理命令(五)

    ---恢复内容开始--- Linux 系统之文本处理命令 (一)基于关键字搜索 (二)基于列处理文本 (三)文本统计 (四)文本排序 (五)删除重复行 (六)文本比较 (七)处理文本内容 (八)搜索替 ...

  2. Linux文本文件——管理文本的命令

    Linux文本文件——管理文本的命令 摘要:本文主要学习了在Linux中管理文本的命令. cat命令 cat命令用来显示文本文件的内容,也可以把几个文件内容附加到另一个文件中,即连接合并文件,是Con ...

  3. linux学习-常用文本处理命令

    1.文本处理命令 (1) tr 转换或删除字符 tr [OPTION]...SET1 SET2 选项: -c 取SET1字符串的补集 -d 删除属于SET1中的字符 -s 把连续重复出现的字符以单独一 ...

  4. Linux中的高级文本处理命令,cut命令,sed命令,awk命令

    1.2.1 cut命令 cut命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields    ## 用于有特定分隔字符 [r ...

  5. Linux 高级文本处理命令

    1.2.1 cut命令 cut命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields     ## 用于有特定分隔字符 [ ...

  6. Linux高级文本处理命令

    cut 一.cut命令 功能:cut命令可以从一个文本文件/文本流中提取文本列 语法: cut -d '分割字符' -f fields ##用于有特定分割字符 cut -c 字符区间 ##用于排列整齐 ...

  7. linux——高级文本处理命令之wc、cut、sort

    1.  wc :Word Count 命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出 1.1 命令格式: wc [选项]文件... 1.2 命令参数: -c 统计字节数. -l  ...

  8. linux下的文本处理命令sed&awk&grep

    Sedsed 是个精简的.非交互式的编辑器.他能执行和编辑vi和emacs相同的编辑任务.sed编辑器不提供交互使用方式:只能在命令行输入编辑命令.指定文件名,然后在屏幕上察看输出.sed编辑器没有破 ...

  9. DA_06_高级文本处理命令

    Linux中没有盘符这个概念,只有一个根目录“/”,所有文件都在它下面:点击计算机,下面存放的都是根目录下的东西: 2.6 文本文件编辑命令 1.cat 命令用于查看纯文本文件(内容较少的:一次性全部 ...

随机推荐

  1. HttpRunner安装笔记(1)安装环境准备:pyenv安装

    HttpRunner建议在Python 3.4 及以上版本,但是centos有其他功能模块基于python2.7,所以使用pyenv安装多版本pyhon版本. pyenv 是一款特别好用的Python ...

  2. iOS开发之多线程技术—GCD篇

    本篇将从四个方面对iOS开发中GCD的使用进行详尽的讲解: 一.什么是GCD 二.我们为什么要用GCD技术 三.在实际开发中如何使用GCD更好的实现我们的需求 一.Synchronous & ...

  3. 【TCP_协议_socket接口】-jmeter

    1.ip 2.端口号 3.传入参数 4.告诉软件返回  最后以为是什么,不然就会报错 或者无限制的等待  查ascll 码表 启动接口的方法

  4. POJ 1417 并查集 dp

    After having drifted about in a small boat for a couple of days, Akira Crusoe Maeda was finally cast ...

  5. Docker 快速入门教程

    本文目的是给几乎从未接触过docker,或者仅仅是听说或者通过新闻了解过Docker的同学 通过一个已有的Docker仓库构建和提交自己的Docker 镜像 这里会涉及到一些概念,但是不单独介绍 这里 ...

  6. mongodb redis memcache 对比

    从以下几个维度,对 Redis.memcache.MongoDB 做了对比. 1.性能 都比较高,性能对我们来说应该都不是瓶颈. 总体来讲,TPS 方面 redis 和 memcache 差不多,要大 ...

  7. Scrum立会报告+燃尽图 03

    此作业要求:[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2190] 一.小组介绍 组长:王一可 组员:范靖旋,王硕,赵佳璐,范洪达,祁 ...

  8. Beta阶段第三次网络会议

    Beta阶段第三次网络会议 第二次会议问题解决情况 不同等级城堡不同图片,移动动画解决,阴影效果添加 小地图信息添加城堡和士兵信息 新AI设计失败,在存在科技树的情况下,如果将所有可能操作全部纳入考虑 ...

  9. 福大软工1816:Beta(2/7)

    Beta 冲刺 (2/7) 队名:第三视角 组长博客链接 本次作业链接 团队部分 团队燃尽图 工作情况汇报 张扬(组长) 过去两天完成了哪些任务 文字/口头描述 为utils_wxpy.py添加注释 ...

  10. Rsyslog的模板template详解

    一. Template功能 根据用户需求指定任意格式 动态生成文件名 每个输出都使用了一些模板,包括针对文件的,针对用户消息等 备注: 旧版本:$template 新版本:template() V6之 ...