Shell工具(cut,sed,awk,sort用法)

    技术2025-07-29  17

    cut

    sed

    awk

    sort

    一、cut

    1、语法:

    cut [选项参数] [file]

    2、使用说明:

    从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。 如果不指定 File 参数,cut 命令将读取标准输入。必须指定-b、-c 或 -f 标志之一。

    3.选项参数说明

    选项参数功能-b以字节(bytes) 为单位取出固定字符区间-c以字符 (characters) 为单位取出固定字符区间-f指定域(fields),提取第几列,与-d一起使用-d指定分隔符,对列进行分割-s表示不包括那些不含分隔符的行(这样有利于去掉注释和标题)

    注意: 只有当操作域时才可以指定输入分隔符,默认分隔符是制表符。

    4、实例详解

    数据准备1:cut.txt

    zeng 18 li 19 熏悟空 20 印贼做父 22 lee 17 按字节截取数据(-b)

    查询每行第2个字节

    cut -b 2 cut.txt

    查询每行第1-3个字节

    cut -b 1-3 cut.txt

    我的linux系统编码是UTF-8,所以一个汉字占三个字节长度

    按字符截取(-c)

    截取第三个字符

    cut -c 3 cut.txt

    按域截取

    以空格为分隔符,取出每一行第一个域的数据

    cut -d " " -f 1 cut.txt

    截取第三个冒号后面所有的数据

    数据准备2:cut1.txt

    t: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

    代码如下:

    cut -d ":" -f 4- cut1.txt

    以冒号为分隔符,取第三个冒号后面所有的数据,即取从第四个域(列)开始到末尾的数据。

    截取出指定的多列数据

    # 截取第2和第4个域的数据 cut -d '/' -f 2,4 cut1.txt

    以空格为分隔符,截取第二列(不处理输出没有分隔符的行)

    数据准备:

    zeng 18 li 19 熏悟空 20 印贼做父 22 lee 17 我爱北京天安门

    代码:

    cut -d " " -sf 1 cut.txt

    技巧总结:

    1、取连续的多列时,使用 ‘-’ 横杠;比如取第5列到第8列:5-8 N-:指从第N个字段到行尾。 N-M:指从第N个字段到第M个字段。 -N:指从行首到第N个字段。 2、取不连续的多列时,使用 ‘,’ 逗号,比如取第二列,第五列,第八列:2,5,8

    二、sed

    1、工作模式:

    sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非使用重定向存储输出。

    2、使用场景:

    Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等

    3、语法

    sed [选项参数] ‘command’ filename

    选项参数说明

    选项参数功能-e 脚本命令直接在指令列模式上进行sed的动作编辑。会将其后跟的脚本命令添加到已有的命令中,可用于同时编辑多个任务-f 脚本命令文件/该选项会将其后文件中的脚本命令添加到已有的命令中。-f filename会将文件中的sed动作都进行执行-i直接编辑原文件(谨慎使用)-n只打印模式匹配的行(只输出sed特殊操作过的行)-r支持扩展型正则表达式的语法

    4、常用命令功能描述

    命令功能描述a新增,后面可接字符串 ,在当前行下面插入文本i插入,后面可接字符串 ,在当前行上面插入文本c替换,后面可接字符串 ,把选定的行改为新的文本s替换,替换指定字符,搭配正则表达式d删除,删除选择行p打印,将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行

    数据准备:sed1.txt

    zeng 18 li 19 熏悟空 20 印贼做父 22 lee 17 我爱北京天安门 a 新增

    在第三行下面新增字符串’增增增’

    sed '3a 增增增' sed1.txt

    在多个行下新增数据(逗号分隔)

    sed '3,5a 增增增' sed1.txt

    i 插入

    在第二行插入字符串’插插插’

    sed '2i 插插插' sed1.txt

    c 替换行数据

    用指定字符串替换多行数据

    sed '1,2c 替换' sed1.txt

    s 替换指定字符串 s/old str/new str/g

    对每一行的首个指定字符进行替换

    sed 's/e/E/' sed1.txt

    全局替换

    sed 's/e/E/g' sed1.txt

    d 删除

    删除指定行号数据(第三行)

    sed '3d' sed1.txt

    删除空白行数据

    sed '/^$/d' sed1.txt

    删除含有指定字符的行数据

    sed '/e/d' sed1.txt

    p 打印被选择数据

    sed 's/e/E/p' sed1.txt

    对被操作的数据进行打印

    sed -n 's/e/E/p' sed1.txt

    仅打印被操作的数据

    三、awk

    awk是一个强大的文本分析工具。 处理过程:把文件逐行读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析处理。

    1、语法:

    awk [选项参数] '{[pattern] action}' filename pattern:awk查找的内容,匹配模式 action:找到匹配内容后执行的一系列命令

    选项参数说明:

    选项参数说明-F指定分隔符,不指定默认为空格-f调用脚本-v指定变量

    2、优点

    在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息

    3、实例

    1、数据按空格进行分割,取出指定字段数据,$1表示第1字段,$2表示第2个字段,依次类推。

    echo 'may I help you' | awk '{print $1,$3}'

    注意:$0表示输出整行的数据。

    echo 'may I help you' | awk '{print $0}'

    2、按照指定分隔符分割,取出指定列,并用逗号分隔列

    awk -F ':' '{print $5 "," $6}' awk1.txt

    3、设置变量,并进行计算

    awk -v a=10 '{ print a+1}' awk1.txt

    4、输出行号NR和列数NF,并在文件开头输出start,结尾输出end

    awk -F ':' 'BEGIN{print "start"}{print NR " " NF " " $0} END{print "end"}' awk1.txt

    内置变量:

    NF 浏览记录的字段个数 NR 已读的记录数

    5、使用函数(统计每行元素个数)

    awk '{ print length($0) " " $0}' awk1.txt

    6、支持正则表达式(查询s开头的行数据)

    # 查询s开头的 awk '/^s/' awk1.txt

    四、sort

    用于将文本文件内容加以排序

    1、语法:

    sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件]

    参数说明:

    参数说明-b忽略每行前面开始出的空格字符。-c检查文件是否已经按照顺序排序。-d排序时,处理英文字母、数字及空格字符外,忽略其他的字符。-f排序时,将小写字母视为大写字母。-i排序时,除了040至176之间的ASCII字符外,忽略其他的字符。-m将几个排序好的文件进行合并。-M将前面3个字母依照月份的缩写进行排序。-n依照数值的大小排序。-u意味着是唯一的(unique),输出的结果是去完重了的。-o<输出文件> 将排序后的结果存入指定的文件。-r以相反的顺序来排序。-t<分隔字符> 指定排序时所用的栏位分隔字符。

    2、实例:

    数据准备:

    Lily 50 Balle 30 Ana 99 Conda 16 Linda 34 Tom 43

    根据数值大小进行排序

    sort -n sort.txt

    默认按照第一列排序,因为第一列不是数字,故按照首字母进行排序。依次按ASCII码值进行比较,最后将他们按升序输出。

    按相反顺序排序

    sort -r sort.txt

    按照第二列降序排序

    sort -rk 2 sort.txt

    对文档数据进行去重并写入到新的文档中

    sort -u sort.txt -o unique.txt

    Processed: 0.011, SQL: 9