zoukankan      html  css  js  c++  java
  • LINUX核心命令实战总结四——文件过滤及内容编辑处理命令一

    1.1 cat:合并文件或查看文件内容

    【功能说明】

    命令cat查看文件内容

    命令cat的常用5个功能

    序号

    Cat常用功能

    简要例子说明

    1

    查看文件内容

    例如:cat file1.txt

    2

    把多个文件合并在一起

    例如:cat file1.txt file2.txt >>newfile.txt

    3

    创建编辑新文件

    例如:输入cat>file.txt,后面接要编辑的内容,使用快捷方式Ctrl+dCtrl+c可结束编辑。极少使用

    4

    非交互式的编辑或者追加内容到文杰尾部

    这是生产工作中最重要的一个应用,所以要很熟练

    例如:cat >> file.txt << EFO

    I am yanhuihuang

    I 24 year old

    EFO

    5

    清空文件内容

    例如:使用cat /dev/null>file.txt命令就可以把文件内容清空,但是文件还是存在的,偶尔使用。

    【语法格式】

    cat         [OPTION]...         [FILE]...
    cat         [选项]...             [文件]...

    【选项说明】

    命令cat的参数选项及说明

    参数选项

    解释说明(带*的为重点)

    -n

    1开始所有输出的内容按行编号(*

    -b

    -n选项功能类似,但会忽略显示空白行行号。

    -s

    当遇到有连续两行以上的空白行时,就替换为一行空白

    -A

    等价于-vET三个选项的功能之和

    -e

    等价于 -vE

    -E

    在每行结尾显示$符号

    -t

    -vT等价

    -T

    Tab字符显示为^1

    -v

    除了LDFTAB之外,使用^-M引用

    【使用范例】

    基础范例:

    执行如下的完整命令生成test.txt文件内容

    [root@web01 ~]# cat > test.txt <<EFO
    > I love you
    > I am yanhuihuang
    > very good
    > EFO

    以上执行过程及结果:

    [root@web01 ~]# cat test.txt        
    > I love you
    > I am yanhuihuang
    > very good
    
    
    you are very good
    View Code

    执行cat命令,分别带-n-b选项,并对区别

    [root@web01 ~]# cat -n test.txt
         1  > I love you
         2  > I am yanhuihuang
         3  > very good
         4
         5
         6
         7
         8
         9
        10
        11  you are very good
    [root@web01 ~]# cat -b test.txt
         1  > I love you
         2  > I am yanhuihuang
         3  > very good
    
    
    
    
    
    
    
         4  you are very good
    View Code

    执行cat命令,带-E选项

    [root@web01 ~]# cat -E test.txt
    > I love you$
    > I am yanhuihuang$
    > very good$
    $
    $
    $
    $
    $
    $
    $
    you are very good$
    View Code

    执行cat命令,带-s选项

    [root@web01 ~]# cat -s test.txt
    > I love you
    > I am yanhuihuang
    > very good
    
    you are very good
    View Code

    执行cat命令编辑新文本

    [root@web01 ~]# cat test2.txt
    hello world
    [root@web01 ~]# cat test.txt test2.txt
    > I love you
    > I am yanhuihuang
    > very good
    
    
    
    
    
    
    
    you are very good
    hello world
    View Code

    1.2 tac:反向显示文件内容

    【功能说明】

    命令taccat的反向拼写

    【语法格式】

    tac         [OPTION]...             [FILE]...
    tac         [选项]...             [文件]...

    【选项说明】

    命令tac的参数选项及说明

    参数选项

    解释说明(带*的为重点)

    -b

    在行前而非行尾添加分隔标志

    -r

    将分隔标记视作正则表达式来解析

    -s

    使用指定字符串替换行作为分隔标志

    【使用范例】

    命令cattac对比

    [root@web01 ~]# cat /etc/rc.local
    #!/bin/sh
    #
    # This script will be executed *after* all the other init scripts.
    # You can put your own initialization stuff in here if you don't
    # want to do the full Sys V style init stuff.
    
    touch /var/lock/subsys/local
    >/etc/udev/rules.d/70-persistent-net.rules
    [root@web01 ~]# tac /etc/rc.local
    >/etc/udev/rules.d/70-persistent-net.rules
    touch /var/lock/subsys/local
    
    # want to do the full Sys V style init stuff.
    # You can put your own initialization stuff in here if you don't
    # This script will be executed *after* all the other init scripts.
    #
    #!/bin/sh
    View Code

    1.3 more:分页显示文件内容

    【功能说明】

    命令more的功能类似于cat,但more会一页一页显示内容。

    【语法格式】

       more              [option]      [file ...]
       more              [选项]         [文件...]

    【选项说明】

    命令more的参数选项及说明

    参数选项

    解释说明(带*的为重点)

    -num

    指定屏幕显示大小为num

    +num

    从行号num开始显示(*

    -s

    把连续的多个空行显示为一行

    -p

    不滚屏,而是清除整个屏幕,然后显示文本

    -c

    不滚屏,而是从每一屏的顶部开始显示文本,没显示完一行,就清除一行

    命令more的交换式子命令及说明

    参数选项

    解释说明(带*的为重点)

    H或?

    查看帮助

    空格键

    向下滚动一屏(*

    z

    向下滚动一屏

    Enter

    向下滚动一行

    f

    向下滚动一屏

    b

    向上滚动一屏

    =

    输出当前的行号

    /查看的文本

    查找指定的文本

    f

    输出文件名和当前行的行号

    v

    调用vi编辑器

    !命令

    调用shell并执行命令

    q

    退出并保存

    【使用范例】

    命令more后面不接任何参数

    [root@web01 ~]# more /etc/services
    # /etc/services:
    # $Id: services,v 1.48 2009/11/11 14:32:31 ovasik Exp $
    #
    # Network services, Internet style
    # IANA services version: last updated 2009-11-10
    .......
    .......
    echo            7/udp
    discard         9/tcp           sink null
    discard         9/udp           sink null
    View Code

    定义显示行数

    [root@web01 ~]# more  -5 /etc/services
    # /etc/services:
    # $Id: services,v 1.48 2009/11/11 14:32:31 ovasik Exp $
    #
    # Network services, Internet style
    # IANA services version: last updated 2009-11-10
    View Code

    从指定的行数开始显示

    [root@web01 ~]# more  +888 /etc/services
    cableport-ax    282/tcp                 # Cable Port A/X
    cableport-ax    282/udp                 # Cable Port A/X
    rescap          283/tcp                 # rescap
    rescap          283/udp                 # rescap
    corerjd         284/tcp                 # corerjd
    corerjd         284/udp       
    View Code

    【技巧示范】

    分页显示目录下的内容

    [root@web01 ~]# ls /etc/|more -10
    abrt
    acpi
    adjtime
    aliases
    aliases.db
    alsa
    alternatives
    anacrontab
    asound.conf
    at.deny
    View Code

    1.4 less:分页显示文件内容

    【功能说明】

    命令less指针式记录打开文档,快速,消耗少量内存。

    【语法格式】

    less         [option]        [file]
    less         [选项]        [文档]

    【选项说明】

    命令less的参数选项及说明

    参数选项

    解释说明(带*的为重点)

    -i

    搜索时忽略大小写

    -m

    显示类似于more命令的进度百分比

    -N

    显示每行行号

    -s

    将连续的空行压缩为一行显示

    -e

    当文件显示到结尾时自动退出文件,若不使用此选项就需要使用交互命令q退出

    【使用范例】

    [root@web01 ~]# less /etc/services      
    # /etc/services:
    # $Id: services,v 1.48 2009/11/11 14:32:31 ovasik Exp $
    #
    ......
    .......
    #       http://www.iana.org/assignments/port-numbers
    # The Well Known Ports are those from 0 through 1023.
    # The Registered Ports are those from 1024 through 49151
    # The Dynamic and/or Private
    View Code

    显示行号例子

    [root@web01 ~]# less -N /etc/services
          1 # /etc/services:
          2 # $Id: services,v 1.48 2009/11/11 14:32:31 ovasik Exp $
          3 #
          4 # Network services, Internet style
          5 # IANA services version: last updated 2009-11-10
    View Code

    【技巧性范例】

    [root@web01 ~]# ls /etc/|less
    abrt
    acpi
    adjtime
    aliases
    aliases.db
    alsa
    alternatives
    anacrontab
    asound.conf
    at.deny
    audisp
    View Code

    1.5 head:显示文件内部头部

    【功能说明】

    命令head用于显示文件头部,默认显示文件前10

    【语法格式】

    head     [OPTION]...     [FILE]...
    head     [选项]...         [文件]...

    【选项说明】

    命令head参数及说明

    参数选项

    解释说明(带*的为重点)

    -n

    指定显示的行数

    -c

    指定显示的字节数

    -q

    不显示包含给定文件名的文件头

    -v

    总是显示包含给定文件名的文件夹

    【使用范例】

    默认显示文件的前10行例子

    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
    View Code

    显示文件的前n

    [root@web01 ~]# head -n 5 /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

    显示前n个字节

    [root@web01 ~]# head -c 10  /etc/passwd
    root:x:0:0[root@web01 ~]# 

    显示文件的最后n行或者n个字节

    [root@web01 ~]# head -n -21 /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    View Code

    显示多个文件

    [root@web01 ~]# head -1  /etc/passwd 
    root:x:0:0:root:/root:/bin/bash

    1.6 tail:显示文件内容尾部

    【功能说明】

    命令tail用于显示文件内容的尾部

    【语法格式】

    tail         [OPTION]...         [FILE]...
    tail         [选项]...             [文件]...

    【选项说明】

    命令tail的参数选项及说明

    参数选项

    解释说明(带*的为重点)

    -c

    指定显示的字节数

    -n

    指定显示的行数

    -f

    实时输出文件变化后追加的数据(*

    -F

    功能等同于-f    --retry

    --retry

    不停地尝试打开文件直到打开为止,和-f参数和用

    --pid

    -f参数合用,在进程结束后自动退出tail命令

    -s

    监督文件变化的时间的间隔数(秒)

    -q

    不显示包含给定文件名的文件头

    -v

    总是显示包含给定文件名的文件头

    【使用范例】

    [root@web01 ~]# tail /etc/passwd
    rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
    nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
    haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
    ntp:x:38:38::/etc/ntp:/sbin/nologin
    saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    tcpdump:x:72:72::/:/sbin/nologin
    oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
    yhh:x:500:500::/home/yhh:/bin/bash
    View Code

    显示文件末尾5行的内容

    [root@web01 ~]# tail -n 5 /etc/passwd
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    tcpdump:x:72:72::/:/sbin/nologin
    oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
    yhh:x:500:500::/home/yhh:/bin/bash
    View Code

    从第十五行开始显示文件

    [root@web01 ~]# tail -n +15 /etc/passwd
    nobody:x:99:99:Nobody:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
    rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
    abrt:x:173:173::/etc/abrt:/sbin/nologin
    rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
    nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
    haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
    ntp:x:38:38::/etc/ntp:/sbin/nologin
    saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    tcpdump:x:72:72::/:/sbin/nologin
    oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
    yhh:x:500:500::/home/yhh:/bin/bash
    View Code

    实时监控文件变化

    [root@web01 ~]# echo abc >> aa
    [root@web01 ~]# 
    [root@web01 ~]# tail -f aa
    111
    222
    abc

    参数-F的使用

    [root@web01 ~]# tail -f a
    tail: 无法打开"a" 读取数据: 没有那个文件或目录
    tail: 没有剩余文件
    [root@web01 ~]# tail -F a
    tail: 无法打开"a" 读取数据: 没有那个文件或目录
    ^C
    [root@web01 ~

    1.7 tailf:跟踪日志文件

    【功能说明】

    命令tailf几乎和tail  -f相同,不同的是如果文件不增长,那么它不会去访问磁盘文件,也不会更改文件的访问时间

    【语法格式】

    tailf         [OPTION]         file
    tailf         [选项]         文件

    【选项说明】

    命令tailf的参数选项及说明

    参数选项

    解释说明(带*的为重点)

    -n

    指定显示的行数,默认是最后10

    【使用范例】

    跟踪日志文件

    [root@web01 ~]# tailf aa
    111
    222
    abc
    abc1
    [root@web01 ~]# echo abc1 >> aa
    [root@web01 ~]# 

    1.8 cut:从文本中提取一段文字并输入

    【功能说明】

    命令cut从文件的每行剪切字节,字符或字段,并将这些字节,字符或字段输出至标准输出

    【语法格式】

    cut         OPTION...         [FILE]...
    cut         选项...         [文件]...

    【选项说明】

    命令cut的参数选项及说明

    参数选项

    解释说明(带*的为重点)

    -b

    以字节为单位进行分割

    -n

    取消分隔多字节字符,与选项-b一起使用

    -c

    以字节为单位进行分隔(*

    -d

    自定义分隔符,默认以tab为分隔符

    -f

    -d一起使用,指定显示那个区域(*

    N

    N个字节,字符或字段

    N-

    从第N个字节、字符或字段开始至行尾(*

    N-M

    从第N个到M个字节、字符或字段开始至行尾(*

    -M

    从第1个到M个字节、字符或字段开始至行尾(*

    【使用范例】

    以字节为分隔符

    [root@web01 ~]# echo I am yanhuihuang my QQ is 88888888 >aa
    [root@web01 ~]# cat aa
    I am yanhuihuang my QQ is 88888888
    [root@web01 ~]# cut -b -3 aa
    I a
    [root@web01 ~]# cut -b 3- aa
    am yanhuihuang my QQ is 88888888
    [root@web01 ~]# cut -b -3,3- aa
    I am yanhuihuang my QQ is 88888888
    View Code

    以字节为分隔符(英文字母是单字节字符)

    [root@web01 ~]# cut -c 2-10 aa
     am yanhu
    [root@web01 ~]# cut -b 2-10 aa 
     am yanhu
    View Code

    自定义分隔例子

    [root@web01 ~]# cut -d : -f 1 /etc/passwd
    root
    bin
    ........
    ........
    yanhuihuang
    yanhuihuang1
    View Code

    1.9 split:分隔文件

    【功能说明】

    命令split可以按照指定的行数或者指定文件大小进行分隔

    【语法格式】

    split         [OPTION]...     [INPUT ]        [PREFIX]
    split         [选项]...          [输入文件 ]    [输出文件名前缀]

    【选项说明】

     split         [OPTION]...     [INPUT ]        [PREFIX]
     split         [选项]...          [输入文件 ]    [输出文件名前缀]
    View Code

    命令split的参数选项及说明

    参数选项

    解释说明(带*的为重点)

    -b

    指定分隔文件的最大字节数

    -l

    指定分隔后文件的最大行数

    -a

    指定后缀长度,默认为2位字母

    -d

    使用数字后缀

    【使用范例】

    [root@web01 data]# split -l 10 inittab new_ 
    [root@web01 data]# ls new*
    new_aa  new_ab  new_ac
    [root@web01 data]# split -l 10 -d inittab new2_   
    [root@web01 data]# wc -l new2_*                
      10 new2_00
      10 new2_01
       6 new2_02
      10 new2_aaa
      10 new2_aab
       6 new2_aac
      52 总用量
    View Code

    按照文件大小分隔

    [root@web01 data]# split -b 1k -d inittab new3_   
    [root@web01 data]# ls new3*
    new3_00

    1.10 paste:合并文件

    【功能说明】

    命令paste能将文件按照行与行进行合并,中间使用tab隔开。

    【语法格式】

    paste         [OPTION]...         [FILE]...
    paste         [选项]...             [文件]...

    【选项说明】

    命令paste的参数选项及说明

    参数选项

    解释说明(带*的为重点)

    -d

    指定合并的分隔符,默认是TAB(*)

    -s

    每个文件占用一行

    【使用范例】

    [root@web01 data]# paste test1 test2
    1       aaaa
    2       bbbbb
    3       cccccc
    4
    5
    6
    View Code

    通过-d可以指定分隔符

    [root@web01 data]# paste -d : test1 test2
    1:aaaa
    2:bbbbb
    3:cccccc
    4:
    5:eeeeeeeeeeeeee
    6:ggggggg
    View Code

    通过-s合并内容,使其成行

    [root@web01 data]# paste -s test1
    1       2       3       4       5       6
    [root@web01 data]# paste -s test2
    aaaa    bbbbb   cccccc          eeeeeeeeeeeeee  ggggggg
    [root@web01 data]# paste -s test1 test2
    1       2       3       4       5       6
    aaaa    bbbbb   cccccc          eeeeeeeeeeeeee  ggggggg
    View Code

    cat命令合并文本的方式进行对比

    [root@web01 data]# cat test1 test2
    1
    2
    3
    4
    5
    6
    aaaa
    bbbbb
    cccccc
    
    eeeeeeeeeeeeee
    ggggggg
    View Code

    【生产案例】

    假设通过shell脚本生成的账号密码如下:

    stu001
    7f77sj
    stu002
    tsuydh
    stu003
    dhksnk
    stu004
    xdkack
    stu005
    dxhiai
    stu006
    nbkcac
    stu007
    dbakk1
    stu008
    dbm09s
    View Code

    现在要求使用命令将上面文本转换成SVN服务配置文件的账号及密码格式

    stu001=7f77sj
    stu002=tsuydh
    stu003=dhksnk
    stu004=xdkack
    stu005=dxhiai
    stu006=nbkcac
    stu007=dbakk1
    stu008=dbm09s
    View Code

    方法一:

    [root@web01 data]# paste -s test4
    stu001  7f77sj  stu002  tsuydh  stu003  dhksnk  stu004  xdkack  stu005  dxhiai  stu006  nbkcac  stu007  dbakk1  stu008  dbm09s
    [root@web01 data]# paste -sd '=
    ' test4
    stu001=7f77sj
    stu002=tsuydh
    stu003=dhksnk
    stu004=xdkack
    stu005=dxhiai
    stu006=nbkcac
    stu007=dbakk1
    stu008=dbm09s

    方法二:

    [root@web01 data]# paste -d '=' - - <test4
    stu001=7f77sj
    stu002=tsuydh
    stu003=dhksnk
    stu004=xdkack
    stu005=dxhiai
    stu006=nbkcac
    stu007=dbakk1
    stu008=dbm09s

    方法三:xargs+sed命令实现

    [root@web01 data]# xargs -n 2 < test4
    stu001 7f77sj
    stu002 tsuydh
    stu003 dhksnk
    stu004 xdkack
    stu005 dxhiai
    stu006 nbkcac
    stu007 dbakk1
    stu008 dbm09s
    [root@web01 data]# xargs -n 2 < test4|sed 's# #=#g'
    stu001=7f77sj
    stu002=tsuydh
    stu003=dhksnk
    stu004=xdkack
    stu005=dxhiai
    stu006=nbkcac
    stu007=dbakk1
    stu008=dbm09s
    View Code

    方法四:

    [root@web01 data]# sed 'N;s#
    #=#g' test4
    stu001=7f77sj
    stu002=tsuydh
    stu003=dhksnk
    stu004=xdkack
    stu005=dxhiai
    stu006=nbkcac
    stu007=dbakk1
    stu008=dbm09s
  • 相关阅读:
    Java中数据结构对应mysql数据类型
    pom.xml设置字符编码
    java.lang.IllegalStateException: Service id not legal hostname (/test-gw-aqa)
    org.springframework.context.ApplicationContextException: Unable to start web server; nested exceptio
    nacos的三种部署方式
    o.s.c.a.n.c.NacosPropertySourceBuilder : get data from Nacos error,dataId:application-dev.yaml
    java使用split注意事项
    《非暴力沟通》之读书心得
    js存储token
    SpringCloudGateWay之网关跨域问题解决
  • 原文地址:https://www.cnblogs.com/huihuangyan/p/13663745.html
Copyright © 2011-2022 走看看