美文网首页
linux021 管道命令

linux021 管道命令

作者: caoqiansheng | 来源:发表于2020-08-23 15:22 被阅读0次

    Bash在执行命令的时候,有输出的数据会出现,如果数据需要经过多次处理后才能得到我们所需要的各式,这就需要牵涉到管道(pipe)命令的问题
    如我们想要知道/etc下有多少个文件夹:

    # 直接使用ls命令,因etc文件夹中内容较多,无法得知前面的输出内容
    ls -al /etc
    # 通过管道将ls的输出传递至less读取
    ls -al /etc | less
    

    1 选取命令 grep,cut

    1.1 grep

    详见:linux020 文本处理命令 grep,sed,awk

    1.2 cut

    cut OPTION... [FILE]...

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

    参数 含义
    -c 以字符为单位进行分割
    -d 自定义分隔符,默认为制表符
    -f 与-d一起使用,表示取出第几个字段的意思
    # 提取 /etc/passwd前三行,经管道传递至cut,-d指定分隔符':',-f指定取出第2个字段,
    head -3 /etc/passwd | cut -d ':' -f 2
    # 提取 /etc/passwd前三行,经管道传递至cut,取出每行第1个字符,-c适合用于排列整齐的信息
    head -3 /etc/passwd | cut -c 1
    

    2.排序命令 sort,wc,uniq

    2.1 sort

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

    参数 含义
    -b 忽略每行前面开始出的空格字符
    -c 检查文件是否已经按照顺序排序
    -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符
    -f 排序时,将小写字母视为大写字母,也即是忽略大小写
    -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符
    -m 将几个排序好的文件进行合并
    -M 将前面3个字母依照月份的缩写进行排序
    -n 依照数值的大小排序
    -u 意味着是唯一的(unique),输出的结果是去完重了的
    -o<输出文件> 将排序后的结果存入指定的文件
    -r 以相反的顺序来排序
    -t<分隔字符> 指定排序时所用的栏位分隔字符
    -k 指定区间进行排序
    +<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位
    --help 显示帮助
    --version 显示版本信息
    # 直接对passwd进行排序
    cat /etc/passwd | sort
    # 将/etc/passwd文件按以冒号为分隔的第三列进行排序
    cat /etc/passwd | sort -t ':' -k 3
    
    2.2 uniq

    uniq [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][--help][--version][输入文件][输出文件]

    linux下可以用uniq命令可以去除重复行,使用uniq的时候要注意以下二点

    • 对文本操作时,一般会和sort命令进行组合使用,因为uniq不会检查重复的行,除非它们是相邻的行。如果您想先对输入排序,使用sort -u。
    • 对文本操作时,若域中为先空字符(通常包括空格以及制表符),然后非空字符,域中字符前的空字符将被跳过
    参数 含义
    -c, --coun 在每行前加上表示相应行目出现次数的前缀编号
    -d, --repeate 只输出重复的行
    -D, --all-repeate 只输出重复的行,不过有几行输出几行
    -f, --skip-fields=N -f 忽略的段数,-f 1 忽略第一段
    -i, --ignore-case 不区分大小写
    -s, --skip-chars= 与-f有点像,不过-s是忽略后面多少个字符,-s 5就忽略后面5个字符
    -u, --unique 去除重复的后,全部显示出来,根mysql的distinct功能上有点像
    -z, --zero-terminated end lines with 0 byte, not newline
    -w, --check-chars=N 对每行第N 个字符以后的内容不作对照
    --help 显示此帮助信息并退出
    --version 显示版本信息并退出
    # 截取passwd以冒号分隔的第三列,sort -n按数值大小排序,uniq -c统计唯一数字的数目
     cut -d ':' -f 3 etc/passwd | sort -n | uniq -c
    
    2.3 wc(word count)

    统计指定文件中的字节数、字数、行数,并将统计结果显示输出。该命令统计指定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所指定文件的总统计数。
    wc [OPTION]... [FILE]...

    参数 含义
    -c 统计字节数
    -l 统计行数
    -m 统计字符数。这个标志不能与 -c 标志一起使用
    -w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串
    -L 打印最长行的长度
    -help 显示帮助信息
    --version 显示版本信息

    3 字符转换命令

    3.1 tr

    tr [OPTION]... SET1 [SET2]
    从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。

    参数 含义
    -c, -C, --complement 首先补足SET1
    -d, --delete 删除匹配SET1 的内容,并不作替换
    -s, --squeeze-repeats 如果匹配于SET1 的字符在输入序列中存在连续的重复,在替换时会被统一缩为一个字符的长度
    -t, --truncate-set1 先将SET1 的长度截为和SET2 相等
    --help 显示此帮助信息并退出
    --version 显示版本信息并退出

    SET 是一组字符串,一般都可按照字面含义理解。解析序列如下:

    SET 含义
    \NNN 八进制值为NNN 的字符(1 至3 个数位)
    \ 反斜杠
    \a 终端鸣响
    \b 退格
    \f 换页
    \n 换行
    \r 回车
    \t 水平制表符
    \v 垂直制表符
    字符1-字符2 从字符1 到字符2 的升序递增过程中经历的所有字符
    [字符*] 在SET2 中适用,指定字符会被连续复制直到吻合设置1 的长度
    [字符*次数] 对字符执行指定次数的复制,若次数以 0 开头则被视为八进制数
    [:alnum:] 所有的字母和数字
    [:alpha:] 所有的字母
    [:blank:] 所有呈水平排列的空白字符
    [:cntrl:] 所有的控制字符
    [:digit:] 所有的数字
    [:graph:] 所有的可打印字符,不包括空格
    [:lower:] 所有的小写字母
    [:print:] 所有的可打印字符,包括空格
    [:punct:] 所有的标点字符
    [:space:] 所有呈水平或垂直排列的空白字符
    [:upper:] 所有的大写字母
    [:xdigit:] 所有的十六进制数
    [=字符=] 所有和指定字符相等的字符
    3.2 col

    col [-bfhpx] [-l nline]

    选项 描述
    -b 过滤掉所有的控制字符,包括RLF和HRLF
    -f 滤除RLF字符,但允许将HRLF字符呈现出来
    -x 以多个空格字符来表示跳格字符
    -l<缓冲区列数> 预设的内存缓冲区有128列,您可以自行指定缓冲区的大小
    # 将man 命令的帮助文档保存为man_help,使用-b 参数过滤所有控制字符。
    man man | col-b > man_help  
    
    3.3 join

    join [OPTION]... FILE1 FILE2
    功能:“将两个文件里指定栏位同样的行连接起来”,即依照两个文件里共有的某一列,将相应的行拼接成一行。这两个文件必须在已经在此列上是依照同样的规则进行了排序。

    选项 描述
    -a FILENUM 除了显示匹配好的行另外将指定序号(1或2)文件里部匹配的行显示出来
    -e EMPTY 将须要显示可是文件里不存在的域用此选项指定的字符取代
    -i 忽略大写和小写
    -j FIELD 等同于 -1 FIELD -2 FIELD,-j指定一个域作为匹配字段
    -o FORMAT 以指定格式输出
    -t CHAR 以指定字符作为输入输出的分隔符, join默认以空白字符做分隔符(空格和\t),能够使用 join -t $'\t'来指定使用tab做分隔符
    -v FILENUM 与-a相似 但值显示文件里没匹配上的行
    -1 FIELD 以file1中FIELD字段进行匹配
    -2 FIELD 以file2中FIELD字段进行匹配
    --help 打印命令帮助文件
    3.4 paste

    paste [OPTION]... [FILE]...
    paste单词意思是粘贴。该命令主要用来将多个文件的内容合并,与cut命令完成的功能刚好相反。粘贴两个不同来源的数据时,首先需将其分类,并确保两个文件行数相同。paste将按行将不同文件行信息放在一行。缺省情况下, paste连接时,用空格或tab键分隔新行中不同文本,除非指定-d选项,它将成为域分隔符。

    选项 描述
    -d 指定不同于空格或tab键的域分隔符。例如用@分隔域,使用- d @
    -s 将每个文件合并成行而不是按行粘贴
    3.5 expand

    expand命令 用于将文件的制表符(TAB)转换为空白字符(space),将结果显示到标准输出设备。
    expand [OPTION]... [FILE]...

    选项 描述
    -t 指定制表符所代表的空白字符的个数,而不使用默认的8
    -i 不转换非空白符后的制表符
    --help 显示帮助信息
    --version 显示版本信息

    4 切割命令split

    Linux split命令用于将一个文件分割成数个,该指令将大文件分割成较小的文件,在默认情况下将按照每1000行切割成一个小文件。
    split [OPTION]... [FILE [PREFIX]]

    选项 描述
    -b 指定每多少字节切成一个小文件
    --help 查看帮助信息
    --version 显示版本信息
    -C 与参数”-b”相似,但是在切 割时将尽量维持每行的完整性

    5 参数转换 xargs

    xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它能够将标准输入或管道中的数据转换为特定命令的命令行参数,也可以将单行或多行文本输入转换为其他格式的数据,比如单行变多行或者多行变单行。xargs的默认命令是echo,默认分隔符是空格。通过xargs的处理,换行和空白都会被替换为空格。
    somecommand | xargs [OPTION]... COMMAND [INITIAL-ARGS]...

    选项 描述
    -a file 从文件中读入作为sdtin
    -e flag 注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止
    -p 当每次执行一个argument的时候询问一次用户
    -n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的
    -t 表示先打印命令,然后再执行
    -i 或者是-I 这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替
    -r no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了
    -s num 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数。
    -L num 从标准输入一次读取 num 行送给 command 命令
    -l 同 -L
    -d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符
    -x exit的意思,主要是配合-s使用
    -P 修改最大的进程数,默认是1,为0时候为as many as it can

    相关文章

      网友评论

          本文标题:linux021 管道命令

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