文本处理工具

分页查看文件内容

less和more命令介绍

分页查看文件内容:less和more

less:一页一页地查看文件或STDIN输出  
# less FILE

less的快捷键:

    Ctrl+u:向上翻半屏

    Ctrl+d:向下翻半屏

    Ctrl+f:向下翻一屏

    Ctrl+b:向上翻一屏

    ! COMMAND:执行shell命令

    /string:搜索string

    ?string:搜索string

    n/N:跳到下一个 or 上一个匹配

    q:退出

注:less命令是man命令使用的分页器


more: 分页查看文件    
# more FILE

more [OPTIONS...] FILE...
    -d: 显示翻页及退出提示
[root@centos7 ~]# more /etc/rc.d/init.d/functions 
[root@centos7 ~]# less /etc/rc.d/init.d/functions 
[root@centos7 ~]# more -d /etc/rc.d/init.d/functions

文件查看

cat命令介绍
文件查看命令:cat, tac,rev

cat [OPTION]... [FILE]...

    -E: 显示行结束符$
    -n: 对显示出的每一行进行编号
    -A:显示所有控制符    
    -b:非空行编号
    -s:压缩连续的空行成一行

[root@centos7 tmp]# cat  file.txt 
[root@centos7 tmp]# cat -E file.txt 
[root@centos7 tmp]# cat -n file.txt 
[root@centos7 tmp]# cat -A file.txt 
[root@centos7 tmp]# cat -b file.txt
[root@centos7 tmp]# cat -s file.txt

cat1.png

cat2.png

cat3.png

显示文本前或后行内容

head
head [OPTION]... [FILE]...
    -c #: 指定获取前#字节
    -n #: 指定获取前#行
    -#:指定行数


tail
tail [OPTION]... [FILE]...
    -c #: 指定获取后#字节
    -n #: 指定获取后#行
    -#:
    -f: 跟踪显示文件新追加的内容,常用日志监控
[root@centos7 tmp]# head -5 /etc/passwd  显示/etc/passwd文件的前5行内容
[root@centos7 tmp]# tail -5 /etc/passwd  显示/etc/passwd文件的后5行内容

head1.png

按列抽取文本cut和合并文件paste

cut [OPTION]... [FILE]...
    -d DELIMITER: 指明分隔符,默认tab
    -f FILEDS:
        #: 第#个字段
        #,#[,#]:离散的多个字段,例如1,3,6
        #-#:连续的多个字段, 例如1-6
        混合使用:1-3,7
    -c按字符切割
    --output-delimiter=STRING指定输出分隔符


E.G 显示文件或STDIN数据的指定列
    cut-d:-f1/etc/passwd
    cat /etc/passwd|cut-d:-f7
    cut-c 2-5 /usr/share/dict/words



paste 合并两个文件同行号的列到一行
    paste [OPTION]... [FILE]...
        -d 分隔符:指定分隔符,默认用TAB
        -s : 所有行合成一行显示

        paste f1 f2
        paste -s f1 f2
[root@centos7 tmp]# cut -d: -f1,3,7 /etc/passwd | head -5  
root:0:/bin/bash
bin:1:/sbin/nologin
daemon:2:/sbin/nologin
adm:3:/sbin/nologin
lp:4:/sbin/nologin

以冒号为分隔符,显示/etc/passwd下第一列、第三列、第七列

文本数据统计:wc

计数单词总数、行总数、字节总数和字符总数
可以对文件或STDIN中的数据运行
# wc FILE
使用-l来只计数行数
使用-w来只计数单词总数
使用-c来只计数字节总数
使用-m来只计数字符总数

[root@centos7 tmp]# wc file.txt 
 2  3 12 file.txt
 
对应的分别为:行数、单词数、字节数(包括特殊字符)

[root@centos7 tmp]# cat -A file.txt 
my name is$
$

[root@centos7 tmp]# wc -l file.txt 
2 file.txt
[root@centos7 tmp]# wc -w file.txt 
3 file.txt
[root@centos7 tmp]# wc -c file.txt 
12 file.txt

文本排序sort

把整理过的文本显示在STDOUT,不改变原始文件
    # sort[options]file(s)
    常用选项
        -r执行反方向(由上至下)整理
        -n执行按数字大小整理
        -f选项忽略(fold)字符串中的字符大小写
        -u选项(独特,unique)删除输出中的重复行
        -t c选项使用c做为字段界定符
        -k X选项按照使用c字符分隔的X列来整理能够使用多次

uniq

uniq命令:从输入中删除重复的前后相接的行
uniq[OPTION]... [FILE]...
    -c: 显示每行重复出现的次数;
    -d: 仅显示重复过的行;
    -u: 仅显示不曾重复的行;
        连续且完全相同方为重复

常和sort 命令一起配合使用:
sort FILE | uniq-c

比较文件diff

比较两个文件之间的区别
# difffoo.conf-brokenfoo.conf-works
5c5
<use_widgets=no
---
>use_widgets=yes
注明第5行有区别(改变)

复制对文件改变patch

diff命令的输出被保存在一种叫做“补丁”的文件中
    使用-u选项来输出“统一的(unified)”diff格式文件,最适用于补丁文件。

patch命令复制在其它文件中进行的改变(要谨慎使用!)
适用-b选项来自动备份改变了的文件

# diff -u foo.conf-brokenfoo.conf-works > foo.patch
# patch -b foo.conf-brokenfoo.patch

向文件打补丁
    patch [OPTIONS] -i /PATH/TO/PATCH_FILE  /PATH/TO/OLDFILE
    patch  /PATH/TO/OLDFILE < /PATH/TO/PATCH_FILE

grep

文本处理工具之grep、egrep和fgrep
grep:(global search regular expression(RE)and print out the line)
文本搜索工具,根据用户指定的文本模式对目标文件进行逐行搜索,并显示匹配的行 

格式:grep [options] 'PATTERF' file,默认只支持基本正则表达式,
查看帮助:
    [root@centos7 tmp]# man 7 regex

要匹配额外功能的字符用-E
选项:
    --color=auto 指定颜色
    -v:反向匹配,显示不能被模式匹配到的行
    -o:仅匹配被模式匹配到的字串,而非整行
    -i:不区分大小写,ignore-case
    -c: 统计匹配的行数
    -n:显示匹配的行号
    -q: 静默模式,不输出任何信息
    -E:支持扩展
    -A #:还显示模式下面的一行
    -B #:还显示模式上面的一行
    -C #:前后各显示一行
    -e:实现多个选项间的逻辑or关系
        grep –e ‘cat ’ -e ‘dog’ file
    -w:整行匹配整个单词


正则表达式:是一类字符所书写出的模式(pattern) 
元字符:类似统配符,不表示字符本身的意义,用于额外功能性的描述

正则表达式引擎:
    采用不同算法,检查处理正则表达式的软件模块
    PCRE(Perl Compatible Regular Expressions)

基本正则表达式的元字符:
字符匹配:
    .:任意单个字符
    []:指定范围内的任意单个字符
        [0-9],[[:digit:]]
        [a-z],[[:lower:]]
        [A-Z],[[:upper:]]
        所有的字母:[[:alpha:]]
        字母+数字:[[:alnum:]]
        空格:[[:space:]]
        标点符号:[[:putct:]]
    [^]: 指定范围外的任意单个字符 

次数匹配:用来指定匹配其前面的字符的次数 
    *:任意次
       例子:x*y xxy xy y 都能匹配
    .*:匹配任意长度的任意字符
    \?:前面字符出现0次或者1次的
    \+:前面字符至少要出现1次   
    \{m\}:匹配m次
    \{m,n\}:至少m次,至多n次
    \{m,\}:至少m次
    \{0,n}:至多n次

工作模式为:贪婪模式;尽可能的长的去匹配字符:

位置锚定:用于指定字符出现的位置
   ^:锚定行首
     ^Char
   $:锚定行尾
      grepchar$
   ^$:空白行
   ^[[:space:]]*$ :空白行
单词的位置锚定
    \<char :锚定词首,\bchar
    char\> : 锚定词尾,char\b
        \<hello\>:锚定单词
分组:
    \(\)
    \(ab\)*xy
引用:
     \1:后向引用,引用前面的第一个左括号以及与之对应的右括号中的模式匹配到的内容,
      意思是说前面出现一次,在\1这也要出现一次

E.G:\(a.b\)xy\1: a6bxya6b

       He like his lover.
       She love her liker.
       He love his lover.
       She like her liker.

[root@centos7 ~]# grep "\(l..e\).*\1r" grep.txt





egrep: 使用扩展正则表达来构建模式,相当于grep -E  
字符匹配: 
    .: 任意单个字符
    []: 指定范围内的任意单个字符
    [^]: 指定范围外的任意单个字符
次数匹配: 
    *:匹配其前面的字符任意次;
    ?: 匹配其前面的字符0或1次;
    +: 匹配其前面的字符至少1次
    {m}: 匹配其前面的字符m次;
    {m,n}: 至少m次,至多n次
    {m,}: 至少m次;
    {0,n}:至多n次;
位置锚定: 
    ^: 行首
    $: 行尾
    \<, \b: 词首
    \>, \b:词尾
分组: 
    (): 分组

|: 或者 
    a|b
    C|cat: C或cat
    (C|c)at:Cat或cat

最后附录上一些课堂练习
(自己写的,非标准答案)

1、找出ifconfig命令结果中本机的所有IPv4地址
2、查出分区空间使用率的最大百分比值
3、查出用户UID最大值的用户名、UID及shell类型
4、查出/tmp的权限,以数字方式显示
5、统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序
6、显示/proc/meminfo文件中以大小s开头的行;(要求:使用两种方式)
7、显示/etc/passwd文件中不以/bin/bash结尾的行
8、显示用户rpc默认的shell程序
9、找出/etc/passwd中的两位或三位数
10、显示/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面存非空白字符的行
11、找出"netstat -tan"命令的结果中以'LISTEN'后跟0、1或多个空白字符结尾的行
12、添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin),而后找出/etc/passwd文件中用户名同shell名的行
13、显示当前系统root、mage或wang用户的UID和默认shell
14、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行
15、使用egrep取出/etc/rc.d/init.d/functions中其基名
16、使用egrep取出上面路径的目录名
17、统计以root身份登录的每个远程主机IP地址的登录次数
18、利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255
19、显示ifconfig命令结果中所有IPv4地址

自己做答的:

1、[root@centos7 ~]# ifconfig | tr -cs "[:digit:].[:digit:]" '\n' | sort  -u -n  -t'.' -k3
2、[root@centos7 ~]# df | tr -s ' ' ':' | cut -d: -f5 | sort -r 
3、[root@centos7 ~]# cat /etc/passwd | sort -t':' -k 3 -n -r | head -1 | cut -d: -f1,3,7
4、[root@centos7 ~]# stat /tmp/functions | tr -s ' ' ':' | head -4 | tail -1 | tr -cs [:alnum:] ':' | cut -d: -f2
5、[root@centos7 ~]# netstat -nt | tr -s ' ' | cut -d' ' -f5 | sort -n
6(1)、[root@centos7 ~]# grep -e ^S -e ^s /proc/meminfo
6(2)、[root@centos7 ~]# grep ^[Ss] /proc/meminfo
6(3)、[root@centos7 ~]# grep -i ^s /proc/meminfo
7、[root@centos7 ~]# grep -v "/bin/bash$" /etc/passwd
8、[root@centos7 ~]# grep "^\<rpc\>" /etc/passwd | cut -d: -f1,7
9、[root@centos7 ~]# cat /etc/passwd | grep  '\<[1-9][0-9]\{1,2\}\>'
10、[root@centos7 ~]# cat /etc/grub2.cfg | grep '^[[:space:]]\+[^[:space:]]'
11、[root@centos7 ~]# netstat -tan | grep "LISTEN[[:space:]]*$"
12、[root@centos7 ~]# cat /etc/passwd | grep "^\<\(.*\)\>.*/\1$"
13、[root@centos7 tmp]# egrep "^\<(root|mage|wang)\>" /etc/passwd | cut -d: -f1,3,7
14、[root@centos7 tmp]# egrep "^(\<[^[:space:]]*\>|_)\(\)" /etc/rc.d/init.d/functions
15、[root@centos7 tmp]# echo "/etc/rc.d/init.d/functions/" | egrep  "[^/]+/?$"
16、[root@centos7 ~]# echo "/etc/sysconfig/network-scripts/" | sed 's@[^/]\+/\?$@@'
17、[root@centos7 tmp]# last | grep "root" | egrep "[[:digit:]]\.{1,3}" | tr -s ' ' | cut -d' ' -f1,3 | sort | uniq -c | sort -nr
18、[root@centos7 ~]# ifconfig |egrep -o "([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])" 
19、[root@centos7 ~]# ifconfig |egrep -o "(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])"

原创文章,作者:sixijie,如若转载,请注明出处:http://www.178linux.com/29754

(0)
sixijiesixijie
上一篇 2016-08-07
下一篇 2016-08-07

相关推荐

  • Linux sed命令详则

    sed命令 sed是一种流编辑器,它是文本处理中非常好的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前的行储存在临时缓存区中,称为“模式空间”(pattern space),接着用sed命令处理缓存区中的内容,处理完成后,把缓存区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed…

    2017-08-11
  • 做有高薪有逼格的运维工程师,不会Linux是没有前途的!

    作为互联网的幕后英雄,运维工程师长期隐匿在大众认知范围之外,关于运维的讨论仍旧是一片无人涉足的荒漠。在某知名行业研究调查结果中,非互联网从业者对于运维相关问题的回复有三个高频词汇是:不知道、没听过、网管。当调查人员告诉他们科幻电影中展示黑客高超技巧时的命令行界面正是大多数运维工程师每日工作环境时,他们发出极其一致的惊叹。 相对于普罗大众的一无所知,技术圈对运…

    2017-09-08
  • IP命令

    IP命令 ip命令是Linux下较新的功能强大的网络配置工具。 1 功能 ip命令用来显示或操纵Linux主机的路由、网络设备、策略路由和隧道。 2用法 Usage: ip [ OPTIONS ] OBJECT { COMMAND | help } ip [ -force ] -batch filename -force:不要终止批处理模式中的错误 -b:-…

    Linux干货 2017-05-07
  • bash之脚本入门及课后作业

    概述: shell是一个工具程序,在用户登录后后系统启动,它解释并运行由命令或脚本文件输入的命令,从而实现用户与内核之间的交互。bash是Linux操作系统上默认的shell,在交互和编程两方面,bash提供了许多Bourne shell没有的功能,并且还结合了C shell和Kron shell最有用的功能。 bash的语法和结构   …

    Linux干货 2016-08-15
  • Linux命令格式及常用命令详解

    Linux命令格式及常用命令详解 Linux的命令格式 COMMAND OPTIONS ARGUMENTS COMMAND 表示要执行的命令 OPTIONS 表示命令的运行特性 RGUMENTS 命令的作用对象,有时可以包含多个对象,空格隔开 常用命令详解 ifconfig 功能描述:获取网络接口配置信息或配置网络接口 命令格式: ifconfig [-a]…

    Linux干货 2017-07-02