美文网首页Linux学习之路Linux我用 Linux
Linux 文本处理命令详解(tr cut sort uniq)

Linux 文本处理命令详解(tr cut sort uniq)

作者: rollingstarky | 来源:发表于2018-07-03 04:06 被阅读20次

    一、tr 命令

    tr (translate) 命令可以对来自标准输入的字符进行替换、压缩和删除操作。

    语法
    tr [option] string1 string2
    
    选项

    tr string1 string2 :将标准输入中所有属于 string1 的字符替换为 string2 中的字符
    -d :删除标准输入中所有属于 string1 的字符
    -s :把标准输入中连续的重复字符压缩成一个字符显示
    -c :取代或删除标准输入中所有不属于 string1 的字符

    示例
    # 替换指定字符
    $ echo "hello world" | tr 'h' 'H'
    Hello world
    
    # 删除指定字符(数字和空格)
    $ echo "hello 12345 world" | tr -d '0-9 '
    helloworld
    
    # 压缩指定字符
    $ echo "heeeeeeeeello world" | tr -s 'e'
    hello world
    
    # 字符集补集
    $ echo "hello 12345 world" | tr -c -d '0-9'
    12345
    
    字符集格式(string1 / string2)

    字符集合(即命令参数中的 string1 和 string2)用于指定需要替换或删除的字符。'A-Za-z''A-F0-9''}.\t' 等都是合法的字符集合。

    字符 含义
    \b 退格符
    \n 新行
    \r 回车符
    \t Tab 符
    CHAR1-CHAR2 从 CHAR1 到 CHAR2 的所有字符(按 ASCII 字符顺序)
    [:alnum:] 所有字母和数字
    [:alpha:] 所有字母
    [:blank:] 所有空格和 Tab 字符
    [:cntrl:] 所有控制字符
    [:graph:] 所有可打印字符,不包括空格
    [:lower:] 所有小写字符
    [:punct:] 所有标点符号
    [:space:] 所有横向或纵向的空白字符
    [:upper:] 所有大写字符

    二、cut 命令

    cut 命令用于切割并筛选文本行中的指定部分,其操作对象可以是一个或多个文件,如未指定文件选项或该选项为 "-",则从标准输入中读取需要操作的内容。

    语法

    cut <option> list [file ...]
    其中 list 选项为由逗号分隔的数字或 "-" 号连接的数字范围,用于指定文本行中需要显示的字段。

    • N-:从第 N 个字节、字符、字段到结尾
    • N-M:从第 N 个字节、字符、字段到第 M 个(包括 M 在内)
    • -M:从第 1 个字节、字符、字段到第 M 个(包括 M 在内)
    选项

    -b list:list 选项指定的是 byte 的范围
    -c list:list 选项指定的是字符的范围
    -d:指定字段的分隔符,默认是 Tab
    -f list:list 选项指定的是字段的范围

    示例

    用于演示的文件内容如下:

    $ cat students.txt
    No  Name    Mark
    01  rose    69
    02  jack    71
    03  alex    68
    

    使用 -f 选项提取指定字段

    $ cut -f 2,3 students.txt
    Name    Mark
    rose    69
    jack    71
    alex    68
    

    使用 -d 选项指定字段分隔符

    $ cat students2.txt
    No,Name,Mark
    01,rose,69
    02,jack,71
    03,alex,68
    $ cut -f 2,3 -d "," students2.txt
    Name,Mark
    rose,69
    jack,71
    alex,68
    

    使用 -c 选项提取指定字符范围里的内容

    $ cat test.txt
    abcdefghijklmnopqrstuvwxyz
    abcdefghijklmnopqrstuvwxyz
    abcdefghijklmnopqrstuvwxyz
    $ cut -c -5 test.txt
    abcde
    abcde
    abcde
    $ cut -c 5- test.txt
    efghijklmnopqrstuvwxyz
    efghijklmnopqrstuvwxyz
    efghijklmnopqrstuvwxyz
    

    三、sort 命令

    sort 命令用于将文件内容进行排序,并将排序结果打印到标准输出。它将文件的每一行文本视为一个单位,从首字母向后,依次按该字母的 ASCII 码值进行比较,并按升序输出。

    选项

    -b:忽略每行行首的空格字符
    -c:检查文件是否已按顺序排序
    -d:排序时,只考虑字母、空格和数字,忽略其它字符
    -f:排序时,将小写字母视为大写字母(即忽略大小写)
    -i:排序时,忽略所有非打印字符
    -M:将前面三个字母按月份的缩写进行排序
    -n:按照数值的大小进行排序
    -o:将排序好的结果输出到指定文件中
    -r:以相反的顺序输出排序后的结果
    -t:指定排序时使用的栏位分隔符
    -u:合并显示内容相同的行

    示例

    用于演示的文件内容如下:

    $ cat sort.txt
    AAA:BB
    aaa:4
    ccc:10
    bbb:20
    bbb:8
    

    简单排序

    $ sort sort.txt
    AAA:BB
    aaa:4
    bbb:20
    bbb:8
    ccc:10
    

    按照 BB 列的数字由大到小排序

    $ sort -nr -t: -k2 sort.txt
    bbb:20
    ccc:10
    bbb:8
    aaa:4
    AAA:BB
    # -n 表示按照数字大小排序,-r 表示反向排序
    # -t: 表示冒号作为栏位分隔符,-k2 表示第二栏(即 BB 列)作为排序依据
    

    四、uniq 命令

    uniq 命令用于报告或过滤文件中内容重复的行

    选项

    -c:在每行输出内容的行首加上该行重复的次数
    -d:仅显示内容重复的行
    -u:仅显示内容未重复的行
    -f:不比较指定的栏位
    -s:不比较指定的字符

    示例
    # 源文件
    $ cat uniq.txt
    helloworld
    helloworld
    helloshell
    hellotext
    
    # 删除重复行
    $ uniq uniq.txt
    helloworld
    helloshell
    hellotext
    
    # 只显示未重复的内容
    $ uniq -u uniq.txt
    helloshell
    hellotext
    
    # 统计各行出现的次数
    $ uniq -c uniq.txt
       2 helloworld
       1 helloshell
       1 hellotext
    # 只显示重复行
    $ uniq -d uniq.txt
    helloworld
    

    相关文章

      网友评论

        本文标题:Linux 文本处理命令详解(tr cut sort uniq)

        本文链接:https://www.haomeiwen.com/subject/raqkuftx.html