文本处理工具

分页查看文件内容

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终端的类型与linux发展历史

    一、linux console的类型与说明 说明:        1 由于虚拟终端的实现,人们可以多用户多任务的在一台计算机操作系统上工作             2 在80或90年代的旧电脑上,人们只能用分屏这样的方法来实现多用户,多任务的工作  …

    Linux干货 2016-11-03
  • vim使用方法

    vim是vi的增强版本,具有比vimi更加强大的功能,对于尤其适合编写脚本,下面总结一下vim的常用方法。 vim三种工作模式。         1. 编辑模式:          &nbs…

    2015-03-18
  • ansible配置详解

    概述     ansible是一款无需在被管理主机上安装客户端,基于SSH对多台目标主机进行同时操作的轻量级的管理软件,借助各个内部的功能模块,实现了批量系统配置、批量程序部署、批量运行命令等功能。本篇就介绍一些关于ansible的基础配置相关的内容,具体包括:     1、an…

    Linux干货 2016-11-05
  • bash进阶学习ing

    使用read命令来接受输入使用read来把输入值分配给一个或多个shell变量: -p 指定要显示的提示 -t TIMEOUT read 从标准输入中读取值,给每个单词分配一个变量所有剩余单词都被分配给最后一个变量read -p “Enter a filename: “ FILE 条件选择if语句选择执行:注意: if语句可嵌套单分支if 判断条件: the…

    Linux干货 2016-08-21
  • FHS文件系统各目录功能

    FHS       Filesystem Hierarchy Standard(文件系统目录标准)的缩写,多数Linux版本采用这种文件组织形式,类似于Windows操作系统中c盘的文件目录,FHS采用树形结构组织文件。FHS定义了系统中每个区域的用途、所需要的最小构成的文件和目录,同时还给出了例外处理与矛盾处理。下为…

    Linux干货 2016-10-16
  • 优云软件老司机:如何让运维操作更轻松、高效

    讲师介绍 庞辉富 •广通软件技术总监 •拥有10多年IT运维管理软件研发经验 •致力于自动化运维解决方案的研究和推广 •主导研发的产品广泛应用于海关、公安、能源等多个行业 技术发展给运维带来的挑战 当前的IT建设在这些新技术的演进下,我们看到的是呈现“双态IT”特征。Gartner也提出双模IT理论,与现在谈的双态IT是异曲同工的,不再是一种单纯的形态,而是…

    系统运维 2017-01-09