• 1.5 Linux基础(五)


    1.5.1 文件查看cat,tac,rev,more,less,head,tail

    1.5.1.1 文件查看命令:cat,tac,rev

    • cat [OPTION]... [FILE]...
      • -E: 显示行结束符$

      • -n: 对显示出的每一行进行编号

      • -A:显示所有控制符

    [root@CentOS7 ~]# cat >>f1 <<EOF
    > df
    > df
    > EOF  
    > EOF  
    >    ##为什么没有退出来,EOF后面不能加空格
    [root@CentOS7 ~]# cat -A f1
    dfl$
    dsfj$
    [root@CentOS7 ~]# cat -n f1
     1	dfl
     2	dsfj
     
    [root@CentOS7 ~]# cat -E f1
    dfl$
    dsfj$
     EOF$
    dfl$
    dsfj$
     EOF$
    dfj$
    
    • -b:非空行编号
    [root@CentOS7 ~]# cat -b f1
     1	dfl
    
    
    
     2	dsfj
     3	 EOF
     4	dfl
     5	dsfj
     6	 EOF
     7	dfj
     8	fdksfl
     9	dfj
    10	fdksfl
    11	dfj
    12	fdksfl
    
    • -s:压缩连续的空行成一行
    [root@CentOS7 ~]# cat f1
    dfl
    
    
    
    
    dsfj
     EOF
    dfl
    dsfj
     EOF
    [root@CentOS7 ~]# cat -s f1
    dfl
    
    dsfj
     EOF
    dfl
    dsfj
     EOF
    
    • tac:逆序
    [root@CentOS7 ~]# tac f1
    fdksfl
    dfj
    fdksfl
    dfj
    fdksfl
    dfj
     EOF
    dsfj
    dfl
     EOF
    dsfj
    
    • rev:逆序(文件中的每一行都倒着显示)
    [root@CentOS7 ~]# rev f1
    lfd
    jfsd
    FOE 
    lfd
    jfsd
    FOE 
    jfd
    lfskdf
    

    1.5.1.2 more

    • 分页查看文件

    more [OPTIONS...] FILE...

    • -d: 显示翻页及退出提示

    1.5.1.3 less

    一页一页地查看文件或STDIN输出

    查看时有用的命令包括:

    /文本 搜索 文本

    n/N 跳到下一个 或 上一个匹配

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

    1.5.1.4 head

    head [OPTION]... [FILE]...

    • -c #: 指定获取前#字节
    [root@CentOS7 data]# head -c4 /etc/passwd
    root[root@CentOS7 data]# head -c8 /etc/passwd
    root:x:0[root@CentOS7 data]# 
    
    • -n #: 指定获取前#行

    • -#: 指定行数

    [root@CentOS7 data]#  head -n2 /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    

    1.5.1.5 tail

    tail [OPTION]... [FILE]...

    • -c #: 指定获取后#字节

    • -n #: 指定获取后#行相当于-#

    • -f: 跟踪显示文件fd新追加的内容,常用日志监控相当于 --follow=descriptor

    • -F: 跟踪文件名,相当于—follow=name --retry

    tailf 类似tail –f,当文件不增长时并不访问文件

    1.5.2 按列抽取文本cut

    cut [OPTION]... [FILE]...

    显示文件或STDIN数据的指定列

    • -d DELIMITER: 指明分隔符,默认tab

    • -f FILEDS:

    • #: 第#个字段

    • #,#[,#]:离散的多个字段,例如1,3,6

    • #-#:连续的多个字段, 例如1-6,混合使用:1-3,7

    • -c 按字符切割

    • --output-delimiter=STRING指定输出分隔符

    显示文件或STDIN数据的指定列

    [root@CentOS7 data]# cat /etc/passwd |cut -d: -f1 
    root
    bin
    daemon
    adm
    lp
    sync
    [root@CentOS7 data]# cut -d: -f1 /etc/passwd ##取出用户名
    [root@CentOS7 data]# cat /etc/passwd | cut -d: -f7 
    /bin/bash
    /sbin/nologin
    
    [root@CentOS7 data]#cut -c2-5 /usr/share/dict/words
    ##取出第二到第五个字节
    

    1.5.3 paste

    合并两个文件同行号的列到一行(横向合并)

    paste [OPTION]... [FILE]...

    • -d 分隔符:指定分隔符,默认用TAB
    • -s : 所有行合成一行显示
    [root@CentOS7 scripts]# cat f1
    aaa
    bb
    cc
    [root@CentOS7 scripts]# cat f2
    xxx
    yy
    [root@CentOS7 scripts]# paste f1 f2 
    aaa	xxx
    bb	yy
    cc	
    [root@CentOS7 scripts]# cat f1 f2
    aaa
    bb
    cc
    xxx
    yy
    [root@CentOS7 scripts]# cat f1 f2 >f4
    [root@CentOS7 scripts]# cat f4
    aaa
    bb
    cc
    xxx
    yy
    [root@CentOS7 scripts]# paste -s f1 f2 
    aaa	bb	cc
    xxx	yy
    [root@CentOS7 scripts]# paste -d ":" f1 f2
    aaa:xxx
    bb:yy
    cc:
    

    1.5.4 收集文本统计数据wc

    • 计数单词总数、行总数、字节总数和字符总数

    • 可以对文件或STDIN中的数据运行

    • wc story.txt

      39 237 1901 story.txt

      行数 字数 字节数 文件名

    • 常用选项

      • -l 只计数行数

      • -w 只计数单词总数

      • -c 只计数字符总数

      • -L 显示文件中最长行的长度

    [root@CentOS7 data]# cat /etc/passwd |wc -l 
    64
    [root@CentOS7 data]# cat /etc/passwd |wc -L
    99
    [root@CentOS7 data]# cat /etc/passwd |wc -c
    3171
    [root@CentOS7 data]# cat /etc/passwd |wc -w
    109
    

    1.5.5 文本排序sort

    sort [options] file(s)

    默认排序会把相同的行放在一块

    常用选项

    • -r 执行反方向(由上至下)整理

    • -R 随机排序

    [root@CentOS7 scripts]# seq 72 |sort -R |head -n1
    35 ##随机排序,取出随机数,抽奖
    
    • -n 执行按数字大小整理

    • -f 选项忽略(fold)字符串中的字符大小写

    • -u 选项(独特,unique)删除输出中的重复行

    • -t : 选项使用:做为字段界定符

    • -k # 选项按照使用c字符分隔的#列来整理能够使用多次 #(为数字)

    练习:统计一篇英文文章中,单词出现频率最高的前3个单词

    [root@CentOS7 data]# cat f1|tr " " "
    "|tr -d [:punct:]|sort|uniq -c|sort -n|tail -n3
    9 and
    9 of
    15 the
    

    1.5.6 uniq 默认会将重复行排序到一起

    uniq命令:从输入中删除前后相接的重复的行

    uniq [OPTION]... [FILE]...

    • -c: 显示每行重复出现的次数

    • -d: 仅显示重复过的行

    • -u: 仅显示不曾重复的行

    注:连续且完全相同方为重复-

    常和sort 命令一起配合使用:

    sort userlist.txt | uniq -c

    实验:对/var/log/httpd/access_log 日志文件访问ip进行排序,取出访问量最高的前十个ip

    cat /var/log/httpd/access_log  | cut -d" " -f1|sort |uniq -c |sort -nr|head -n10
    

    1.5.7 比较文件diff 命令

    比较两个文件之间的区别

    [root@CentOS7 data]# diff foo.conf foo2.conf 
    5c5 
    <   use_widgets = no  
    ---  
    >  use_widgets = yes ##注明第5行有区别(改变) 
    

    1.5.8 复制对文件改变patch

    diff 命令的输出被保存在一种叫做“补丁”的文件中

    使用 -u 选项来输出“统一的(unified)”diff格式文件,最适用于补丁文件

    patch 复制在其它文件中进行的改变(要谨慎使用) 适用

    -b 选项来自动备份改变了的文件

    $ diff -u foo.conf foo2.conf > foo.patch 
    
    ##将文件foo.conf和foo2.conf比较差异,将生成的补丁放到foo.patch++ 
    
    $ patch foo.conf foo.patch 
    
    ##将foo.conf打上补丁就变成了foo2.conf文件中的内容,不过foo.conf文件内容就被覆盖了
    
    $ patch -b foo.conf foo.patch  
    ##将foo.conf先备份,后打补丁,找回foo2.conf 
    

    练习:

    1、找出ifconfig “网卡名”命令结果中本机的IPv4地址

    [root@CentOS7 scripts]# ifconfig ens33|head -n2 |tail -n1|tr -s ' '|cut -d' ' -f3 
    192.168.110.131
    

    2、查出分区空间使用率的最大百分比值

    [root@CentOS7 scripts]# df |grep "/dev/sd" |tr -s ' ' '%'|cut -d% -f5|sort -n |tail -n1
    16
    

    3、查出用户UID最大值的用户名、UID及shell类型

    [root@CentOS7 scripts]# cat /etc/passwd |sort -t: -k3 -nr|head -n1|cut -d: -f1,3,7
    nfsnobody:65534:/sbin/nologin
    

    4、查出/tmp的权限,以数字方式显示

    [root@CentOS7 scripts]# stat /tmp|cut -d'/' -f1|head -n4|tail -n1|cut -d'(' -f2
    1777
    [root@CentOS7 scripts]# stat /tmp |egrep -o "([0-9]{3,4}"
    

    5、统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序

    [root@CentOS7 scripts]# netstat -nt |tr -s ' ' :|cut -d: -f6|tr -dc '[0-9].
    '|sort|uniq -c |sort -nr
    3 192.168.110.1
    2 
    1 192.168.110.128
    [root@CentOS7 scripts]# netstat -nt |grep "tcp"|tr -s ' ' ':'|cut -d: -f6|sort |uniq -c |sort -nr 
    2 192.168.110.1
    1 192.168.110.128
    
  • 相关阅读:
    jackson 解析json含有不规则的属性的json字符串的方法
    swift入门-实现简单的登录界面
    github git.exe位置
    linux之SQL语句简明教程---IN
    怎么样才算是精通 C++?
    BZOJ2028: [SHOI2009]会场预约(set)
    BZOJ1058: [ZJOI2007]报表统计(set)
    洛谷P2391 白雪皑皑(并查集)
    BZOJ4514: [Sdoi2016]数字配对(费用流)
    BZOJ3143: [Hnoi2013]游走(期望DP 高斯消元)
  • 原文地址:https://www.cnblogs.com/huangsefeizhu/p/11505874.html
Copyright © 2020-2023  润新知