文本处理工具

分页查看文件内容

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)
上一篇 2016-08-07 22:05
下一篇 2016-08-07 22:05

相关推荐

  • Linux系统启动过程中grub故障与修复(一)

    GRUB 是引导装入器 — 它负责装入内核并引导 Linux 系统。GRUB 可以引导多种操作系统,如Linux、 DOS、 Windows 。 GRUB共分为三个阶段:stage1主要负责BIOS和GRUB之间的交接,载入存放于各个分区中的开机文件;stage1.5是连接stage1和stage2之间的通道,起着过渡的作用,负责识别stage2所在/bo…

    2017-09-03
  • 马哥Linux学习之Linux背景和主要发行版篇

        Linux是一种 类Unix计算机操作系统的统称,简单的说来就是Linux内核+GNU工程的各种工具和数据库。Linux包括各种Linux的发行版,其实也就是为达到不同的目的而制作(目的包括对不同计算机结构的支持,对一个具体区域或语言的本地化,实时应用或嵌入式)的不同版本。     Linux的由来….

    2015-03-19
  • Grep 文本搜索工具与正则表达式

            grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。Grep在实际中对于我们的工作有着很大的作用,用于对文件的搜索,通过由正则表达式字符以及…

    2017-04-15
  • 将两个局域网用openvpn连接起来

    考虑到我们做集群的时候需要用到可能有20台机器,可能我的要求跟别人的不一样的,我需要做20台左右的集群,不仅仅是会,而且需要非常熟练的搭建,最后通过脚步一键自动化部署安装。 目前我有两台电脑,一台可以运行7台,另一台可以运行12台左右,刚好可以满足的我的要求,但是我两台电脑都是设置的nat模式的网络,为什么我非要配置nat模式呢,根据集群架构思想,为了保证架…

    Linux干货 2017-05-01
  • Python函数式编程指南(四):生成器

    转自 http://www.cnblogs.com/huxi/archive/2011/07/14/2106863.html 生成器是迭代器,同时也并不仅仅是迭代器,不过迭代器之外的用途实在是不多,所以我们可以大声地说:生成器提供了非常方便的自定义迭代器的途径。 这是函数式编程指南的最后一篇,似乎拖了一个星期才写好,嗯…… 转载请注明原作者和原文地…

    Linux干货 2015-03-09
  • LVS负载均衡WordPress

    LVS:        LVS是四层协议的开源负载均衡器,工作在netfilter框架INPUT链中,它根据不同的算        法将用户的请求调度给后端服务器,它不受sockt套接字文件限制,性能比nginx七层       …

    Linux干货 2017-05-18