文件管理及常用命令(一)

cat命令:

-n 增加行号 空行也增加行号
    
    [root@localhost ~]# cat f1
    abcd
    abcd
    
    abcd
    
    
    
    abcd
    
    [root@localhost ~]# cat -n f1
     1	abcd     2	abcd     3	
     4	abcd     5	
     6	
     7	
     8	abcd     9	-b 增加行号 空行跳过不加行号

    [root@localhost ~]# cat -b f1
     1	abcd     2	abcd     3	abcd     4	abcd


-s 将相邻多余空行压缩
    
    [root@localhost ~]# cat -s f1
    abcd
    abcd
    
    abcd
    
    abcd

-T 查看tab键
-v 查看文件的^M字符(也就是Windows下的空格)
-A 显示文件里所有的字符
    
    [root@localhost ~]# cat -A f1
    abcd$    abcd$    $    abcd$    $    $    $    abcd$    $-E 显示行结束符$  与-A的不同是——E显示的只是$符号,-A显示的是所有的字符
    
    [root@localhost ~]# cat -E f1
    abcd$    abcd$    $    abcd$    $    $    $    abcd$    $

tac命令:

倒序查看文件内容
    
    [root@localhost ~]# cat f1
    abcd
    efgh
    mnbv
    lkjh
    poiu
    qwer
    
    [root@localhost ~]# tac f1
    
    qwer
    poiu
    lkjh
    mnbv
    efgh
    abcd

rev命令:

反向显示每一行(按字符)
    [root@localhost ~]# cat f1
    abcdefghijklmn
    [root@localhost ~]# rev f1
    nmlkjihgfedcba

more命令:只能向下翻

-d 给出提示(空格翻页,q退出,回车翻一行)

less命令:

/字符串    n顺着方向搜 N逆着方向搜  向下
?字符串  与/相反,n向上 N向下

显示文本前或后行的内容

  • head命令:

    head [OPTION]... [FILE]...
      -c #:  指定获取前# 字节
      -n #:  指定获取前#行 行
    
      [root@localhost ~]# head f1
      abcaskdfj
      asfdkjhja
      lasdkfjldf
      lkjsloiweuoiuw
      werqwerttqw
      
      [root@localhost ~]# head -n 2 f1
      abcaskdfj
      asfdkjhja

    -#:指定行数

    [root@localhost ~]# head -4 f1
      abcaskdfj
      asfdkjhja
      lasdkfjldf
      lkjsloiweuoiuw
    
    
     默认情况下是head是查看10行 可以自己修改默认查看行数
  • tail 命令:

    tail -n # file 
      查看后#行   
      
      [root@localhost ~]# tail -n 2 f1
      werqwerttqw  -f:  跟踪显示文件新追加的内容,
          tail -n 0 -f /var/log/messages &
          实时查看日志最新信息(只显示最新的,老日志不显示)
      -c查看后#字节

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

  • cut命令:

    -d DELIMITER:  指明分隔符,默认tab
      -f FILEDS:  #:  第# 个字段
    
      [root@localhost ~]# cat f1
       abc bcd efg hij lmn
      [root@localhost ~]# cat f1 |cut -d ' ' -f 2
      abc  #,#[,#] :离散的多个字段,例如1,3,6
      
      [root@localhost ~]# cat f1 |cut -d ' ' -f 2,3
      abc bcd  #-# :连续的多个字段,  例如1-6
          [root@localhost ~]# cat f1 |cut -d ' ' -f 2-5
          abc bcd efg hij
    
      混合使用:1-3,7
          [root@localhost ~]# cat f1 |cut -d ' ' -f 2-5,6 
          abc bcd efg hij lmn
    
      -c 按字符切割
      --output-delimiter=STRING
      
      cut -d : -f 1,3 file
      cut -c 44-46
      cut -d : -f 1,3  --output-delimiter=“ ” file
    
      [root@localhost ~]# df | tr -s ' '
      Filesystem 1K-blocks Used Available Use% Mounted on
      /dev/mapper/vg0-root 20511356 343196 19119584 2% /
      tmpfs 502068 0 502068 0% /dev/shm
      /dev/sda1 194241 34117 149884 19% /boot
      /dev/mapper/vg0-usr 10190136 1962620 7703228 21% /usr
      /dev/mapper/vg0-var 20511356 122168 19340612 1% /var
      [root@localhost ~]# df | tr -s ' '|tr ' ' ':'
      Filesystem:1K-blocks:Used:Available:Use%:Mounted:on
      /dev/mapper/vg0-root:20511356:343196:19119584:2%:/
      tmpfs:502068:0:502068:0%:/dev/shm
      /dev/sda1:194241:34117:149884:19%:/boot
      /dev/mapper/vg0-usr:10190136:1962620:7703228:21%:/usr
      /dev/mapper/vg0-var:20511356:122168:19340612:1%:/var
      [root@localhost ~]# df | tr -s ' '|tr ' ' ':'|cut -d: -f 5
      Use%  2%  0%  19%  21%  1%
      [root@localhost ~]# df | tr -s ' '|tr ' ' ':'|cut -d: -f 5|cut -d% -f 1
      Use  2
      0
      19
      21
      1
      [root@localhost ~]#

paste命令:

paste  合并两个文件同行号的列到一行
paste [OPTION]... [FILE]...
-d  分隔符: 指定分隔符,默认用TAB
-s :  所有行合成一行显示
paste f1 f2
paste -s f1 f2
    [root@localhost ~]# paste -s f1 f2
     abc bcd efg hij lmn    123 456 678 987 9765
    [root@localhost ~]# paste  f1 f2
     abc bcd efg hij lmn	123 456 678 987 9765
    [root@localhost ~]# paste -d ':' f1 f2
     abc bcd efg hij lmn:123 456 678 987 9765

收集文本统计数据wc

计数单词总数、行总数、字节总数和字符总数
可以对文件或STDIN 中的数据运行
[root@localhost ~]# cat f1 
 abc bcd efg hij lmn
[root@localhost ~]# wc f1
 1    5    21    f1
行数 字数 字符数 文件名

使用 -l 来只计数行数
    
    [root@localhost ~]# cat f1
     abc bcd efg hij lmn
    qwertyuiolkgfdsazxc 
    [root@localhost ~]# wc -l f1
    2 f1

使用 -w 来只计数单词总数

    [root@localhost ~]# wc -w f1
    6 f1

使用 -c 来只计数字节总数
    
    [root@localhost ~]# wc -c f1
    42 f1

使用 -m 来只计数字符总数
  
    [root@localhost ~]# wc -m f1
    42 f1

文本排序sort

把整理过的文本显示在STDOUT ,不改变原始文件
 sort [options] file(s)
常用选项
-r 执行反方向(由上至下)整理
    
    [root@localhost ~]# df | sort -r 
    tmpfs             500680    6764    493916   2% /run
    tmpfs             500680       0    500680   0% /sys/fs/cgroup
    tmpfs             500680       0    500680   0% /dev/shm
    tmpfs             100136       0    100136   0% /run/user/0
    Filesystem     1K-blocks    Used Available Use% Mounted on
    devtmpfs          486152       0    486152   0% /dev
    /dev/sda3       20961280 2670020  18291260  13% /usr
    /dev/sda2       41922560  584656  41337904   2% /
    /dev/sda1         496300  140508    355792  29% /boot

-n 执行按数字大小整理
-f 选项忽略(fold )字符串中的字符大小写
-u 选项(独特,unique )删除输出中的重复行
    
    [root@localhost ~]# cat f1
    abc
    abc
    abc
    bcd
    abc
    abc
    [root@localhost ~]# cat f1|sort -u
    abc
    bcd

-t c 选项使用c 做为字段界定符
-k X 选项按照使用c 字符分隔的X 列来整理能够使用多次
    [root@localhost ~]# df |tail -8|tr -s ' ' ':' | sort -t : -k2 
    tmpfs:100136:0:100136:0%:/run/user/0
    /dev/sda3:20961280:2670020:18291260:13%:/usr
    /dev/sda2:41922560:584656:41337904:2%:/
    devtmpfs:486152:0:486152:0%:/dev
    /dev/sda1:496300:140508:355792:29%:/boot
    tmpfs:500680:0:500680:0%:/dev/shm
    tmpfs:500680:0:500680:0%:/sys/fs/cgroup
    tmpfs:500680:6764:493916:2%:/run

uniq

uniq 命令:从输入中删除重复的前后相接的行
    
    [root@localhost ~]# cat f1
    abc
    abc
    abc
    bcd
    abc
    abc
    [root@localhost ~]# cat f1 |uniq
    abc
    bcd
    abc

uniq [OPTION]... [FILE]...
-c:  显示每行重复出现的次数;

    [root@localhost ~]# cat f1 |uniq -c
      3 abc      1 bcd      2 abc

-d:  仅显示重复过的行;
    
    [root@localhost ~]# cat f1 |uniq -d
    abc
    abc

-u:  仅显示不曾重复的行;连续且完全相同方为重复
    
    [root@localhost ~]# cat f1 |uniq -u
    bcd


常和sort  命令一起配合使用:
    [root@localhost ~]# sort f1 |uniq -c
      5 abc      1 bcd

比较文件

比较两个文件之间的区别
    $ diff foo.conf-broken foo.conf-works
    5c5
    < use_widgets = no
    ---
    > use_widgets = yes
    注明第5 行有区别(改变)
    
    
    复制对文件改变patch
        diff 命令的输出被保存在一种叫做“补丁”的文件中
        使用 -u 选项来输出“统一的(unified )”diff 格式文
        件,最适用于补丁文件。
        patch 命令复制在其它文件中进行的改变(要谨慎使用
        !)
        适用 -b 选项来自动备份改变了的文件
        $ diff -u foo.conf-broken foo.conf-works > foo.patch
        $ patch -b foo.conf-broken foo.patch

Linux上文本三剑客:

grep :文本过滤( 模式:pattern) 工具;    
    grep, egrep, fgrep (不 支持正则表达式 搜索)
sed :stream editor ,文本编辑工具;
awk :Linux 上的实现gawk ,文本报告生成器
  • grep

    grep: Global search REgular expression and Print out the line.
      作用:文本搜索工具,根据用户指定的“模式”对目标文
      本逐行进行匹配检查;打印匹配到的行;
      模式:由正则表达式字符及文本字符所编写的过滤条件
      grep [OPTIONS] PATTERN [FILE...]
      grep root /etc/passwd
          
          [root@localhost ~]# grep root /etc/passwd
          root:x:0:0:root:/root:/bin/bash
          operator:x:11:0:operator:/root:/sbin/nologin
          rooter:x:1010:1010:rpc:/home/rooter:/bin/bash
    
      grep "$USER" /etc/passwd
          
          [root@localhost ~]# grep "$USER" /etc/passwd
          root:x:0:0:root:/root:/bin/bash
          operator:x:11:0:operator:/root:/sbin/nologin
          rooter:x:1010:1010:rpc:/home/rooter:/bin/bash
    
      grep '$USER' /etc/passwd
         单引号在这里是强引用 
          
      grep `whoami` /etc/passwd
          
          [root@localhost ~]# grep `whoami` /etc/passwd
          root:x:0:0:root:/root:/bin/bash
          operator:x:11:0:operator:/root:/sbin/nologin
          rooter:x:1010:1010:rpc:/home/rooter:/bin/bash

    选项:

    --color=auto:  对匹配到的文本着色显示;
      -v:  显示不能够被pattern 匹配到的行;
          
          [root@localhost ~]# grep -v UUID /etc/fstab 
    
          #
          # /etc/fstab
          # Created by anaconda on Mon Jul 25 12:04:17 2016
          #
          # Accessible filesystems, by reference, are maintained under '/dev/disk'
          # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
          #
    
      -i:  忽略字符大小写
          
          [root@localhost ~]# grep -i uuid /etc/fstab 
          UUID=f4406f6a-e495-45a0-a85e-3b059c0d3130 /                       xfs     defaults        0 0
          UUID=7c25120e-2371-413d-b584-fdd695b96702 /boot                   xfs     defaults        0 0
          UUID=19470291-724c-4f01-b6e1-7109ad22be1b /usr                    xfs     defaults        0 0
          UUID=c3460309-9e8c-4037-8684-4c6bdcabbacb swap                    swap    defaults        0 0
    
      -n:显示匹配的行号
          
          [root@localhost ~]# grep -ni uuid /etc/fstab 
          9:UUID=f4406f6a-e495-45a0-a85e-3b059c0d3130 /                       xfs     defaults        0 0
          10:UUID=7c25120e-2371-413d-b584-fdd695b96702 /boot                   xfs     defaults        0 0
          11:UUID=19470291-724c-4f01-b6e1-7109ad22be1b /usr                    xfs     defaults        0 0
          12:UUID=c3460309-9e8c-4037-8684-4c6bdcabbacb swap                    swap    defaults        0 0
    
      -c:  统计匹配的行数
          
          [root@localhost ~]# grep -ci uuid /etc/fstab 
          4
    
      -o:  仅显示匹配到的字符串;
          
          [root@localhost ~]# grep -o UUID /etc/fstab 
          UUID
          UUID
          UUID
          UUID
    
      -q:  静默模式,不输出任何信息
      -A # :after,  后#行 行
          [root@localhost ~]# grep -nA3 root /etc/passwd
          1:root:x:0:0:root:/root:/bin/bash
          2-bin:x:1:1:bin:/bin:/sbin/nologin
          3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
          4-adm:x:3:4:adm:/var/adm:/sbin/nologin
          --      10:operator:x:11:0:operator:/root:/sbin/nologin
          11-games:x:12:100:games:/usr/games:/sbin/nologin
          12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
          13-nobody:x:99:99:Nobody:/:/sbin/nologin
    
       -B #: before,  前#行
          
          [root@localhost ~]# grep -nB3 root /etc/passwd
          1:root:x:0:0:root:/root:/bin/bash
          --      7-shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
          8-halt:x:7:0:halt:/sbin:/sbin/halt
          9-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
          10:operator:x:11:0:operator:/root:/sbin/nologin
    
       -C # :context,  前后各#行
          
          [root@localhost ~]# grep -nC3 root /etc/passwd
          1:root:x:0:0:root:/root:/bin/bash
          2-bin:x:1:1:bin:/bin:/sbin/nologin
          3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
          4-adm:x:3:4:adm:/var/adm:/sbin/nologin
          --      7-shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
          8-halt:x:7:0:halt:/sbin:/sbin/halt
          9-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
          10:operator:x:11:0:operator:/root:/sbin/nologin
          11-games:x:12:100:games:/usr/games:/sbin/nologin
          12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
          13-nobody:x:99:99:Nobody:/:/sbin/nologin
    
       -e :实现多个选项间的逻辑or 关系
          [root@localhost ~]# grep -n  -e root -e bash /etc/passwd
          1:root:x:0:0:root:/root:/bin/bash
          10:operator:x:11:0:operator:/root:/sbin/nologin
          38:mageedu:x:1000:1000:mageedu:/home/mageedu:/bin/bash
          39:user1:x:1001:1001::/home/user1:/bin/bash
          40:tom:x:1002:1002::/home/tom:/bin/bash
          41:user2:x:1003:1003::/home/user2:/bin/bash
    
              
       -w :整行匹配整个单词
          
          [root@localhost ~]# grep -w UUID /etc/fstab 
          UUID=f4406f6a-e495-45a0-a85e-3b059c0d3130 /                       xfs     defaults        0 0
          UUID=7c25120e-2371-413d-b584-fdd695b96702 /boot                   xfs     defaults        0 0
          UUID=19470291-724c-4f01-b6e1-7109ad22be1b /usr                    xfs     defaults        0 0
          UUID=c3460309-9e8c-4037-8684-4c6bdcabbacb swap                    swap    defaults        0 0
    
          
       -E :使用ERE

正则表达式

REGEXP :由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能
    程序支持:grep, vim, less,nginx等
分两类:
    基本正则表达式:BRE
    扩展正则表达式:ERE    grep -E = egrep
正则表达式引擎:
    采用不同算法,检查处理正则表达式的软件模块 PCRE(Perl Compatible Regular Expressions)
    元字符分类:字符匹配、匹配次数、位置锚定、分组

基本正则表达式元字符

  • 字符匹配:

    . :   匹配任意单个字符;
    [] :   匹配指定范围内的任意单个字符
    [^]  :匹配指定范围外的任意单个字符
    [:digit:] 、[:lower:] 、[:upper:] 、[:alpha:] 、[:alnum:] 、[:punct:] 、[:space:]
  • 匹配次数:

    用在要制定次数的字符后面,用于指定前面的字符要出现的次数    
    * :匹配前面的字符任意次,包括0次贪婪模式:尽可能长的匹配
        .* :任意长度的任意字符
        \? :匹配其前面的字符0 或1次
        \+ :匹配其前面的字符至少1次
        \{m\} :匹配前面的字符m次
        \{m,n\} :匹配前面的字符至少m 次,至多n次
        \{,n\} :匹配前面的字符至多n次 
        \{m,\} :匹配前面的字符至少m次
  • 位置锚定

^ :行首锚定,用于模式的最左侧

        [root@localhost ~]# grep ^root /etc/passwd
        root:x:0:0:root:/root:/bin/bash
        rooter:x:1010:1010:rpc:/home/rooter:/bin/bash

    $ :行尾锚定,用于模式的最右侧
        [root@localhost ~]# grep bash$ /etc/passwd
        root:x:0:0:root:/root:/bin/bash
        mageedu:x:1000:1000:mageedu:/home/mageedu:/bin/bash
        user1:x:1001:1001::/home/user1:/bin/bash
        tom:x:1002:1002::/home/tom:/bin/bash
        user2:x:1003:1003::/home/user2:/bin/bash

    ^PATTERN$:  用于模式匹配整行
        ^$:  空行
        ^[[:space:]]*$  :空白行
    \< 或 或 \b :词首锚定,用于单词模式的左侧
    \> 或 或 \b :词尾锚定;用于单词模式的右侧
    \<PATTERN\> :匹配整个单词
  • 分组

    \(\) :将一个或多个字符捆绑在一起,当作一个整体进行处理,如:\(root\)\+
     分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ...
     \1:  从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到 的 字符
     实例: \(string1\+\(string2\)*\)
         \1: string1\+\(string2\)*
         \2: string2
         后向引用:引用前面的分组括号中的模式所匹配字符(而非模式本身)

egrep及扩展的正则表达式

egrep = grep -E
    egrep [OPTIONS] PATTERN [FILE...]
    扩展正则表达式的元字符:
    字符匹配:
        .  任意单个字符
        []  指定范围的任意单个字符
        [^] 不在指定范围内的任意单一字符
        
    次数匹配:        * :匹配前面字符任意次
        ?: 0 或1次
        + :1 次或多次
        {m} :匹配m次
        {m,n} :至少m ,至多n次
    
    位置锚定:
        ^ : 行首
        $ : 行尾
        \<, \b : 语首
        \>, \b : 语尾
    分组:
        ()
        后向引用:\1, \2, ...
    或者:
        a|b
        C|cat: C 或cat
        (C|c)at:Cat 或cat

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