zoukankan      html  css  js  c++  java
  • [Linux]常用命令之【nl/sed/awk/wc/xargs】

    nl

    nl : 在linux系统中用来计算文件中行号.
    nl 可以将输出的文件内容自动的加上行号!其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等等的功能。

    [root@CENTOS7-20200707 ~]# nl -b a -n rz /etc/passwd #内容按行号右对齐补0列出
    000001	root:x:0:0:root:/root:/bin/bash
    000002	bin:x:1:1:bin:/bin:/sbin/nologin
    000003	daemon:x:2:2:daemon:/sbin:/sbin/nologin
    000004	adm:x:3:4:adm:/var/adm:/sbin/nologin
    000005	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    000006	sync:x:5:0:sync:/sbin:/bin/sync
    000007	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    000008	halt:x:7:0:halt:/sbin:/sbin/halt
    000009	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    ...
    
    [root@CENTOS7-20200707 ~]# nl -b a -n rn /etc/passwd #内容按行号右对齐(不补0)列出
         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
         5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
         6	sync:x:5:0:sync:/sbin:/bin/sync
         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
    ...
    
    [root@CENTOS7-20200707 ~]# nl -b a -n ln /etc/passwd #内容按行号左对齐(不补0)列出
    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
    5     	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    6     	sync:x:5:0:sync:/sbin:/bin/sync
    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
    ...
    

    sed

    sed对文本的处理很强大,并且sed非常小,参数少,容易掌握,他的操作方式根awk有点像。
    sed按顺序逐行读取文件。
    sed执行为该行指定的所有操作,并在完成请求的修改之后的内容显示出来,也可以存放到文件中。
    参数 -i[扩展名], --in-place[=扩展名] 直接修改文件(如果指定扩展名就备份文件)

    [root@CENTOS7-20200707 ~]# cat ./myfile.txt | grep "johnny" | sed 's/johnny/hello/g' [直接将将文本中出现"johnny"的行中的"johnny"内容全部替换为"hello"]
    (格式: sed 's/将被替换的字符/新的字符/g')
    
    [root@CENTOS7-20200707 ~]# cat ./myfile.txt | grep "johnny" | sed -i 's/johnny/hello/g' [直接将将文本中出现"johnny"的行中的"johnny"内容全部替换为"hello"]
    (参数-i: 可让sed直接去修改后面接的文件内容而非屏幕输出)
    
    [root@CENTOS7-20200707 ~]# nl -b a -n rz /etc/passwd | sed '2,5d' # /etc/passwd文件内容按行号右对齐补0列出,且删除第2-5行
    000001	root:x:0:0:root:/root:/bin/bash
    000006	sync:x:5:0:sync:/sbin:/bin/sync
    000007	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    000008	halt:x:7:0:halt:/sbin:/sbin/halt
    000009	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    000010	operator:x:11:0:operator:/root:/sbin/nologin
    ...
    

    awk

    awk有3种形式:awk,gawk,nawk。平时所说的awk,其实就是gawk。

    • F: 指定字段分隔符
    [root@CENTOS7-20200707 johnny]# echo "32:34" |awk -F: '{print "max = ",max($1,$2)}
    > function max(one,two){
    > if(one > two){
    >  return one;
    > }else{
    >  return two;
    > }
    > }'
    max =  34
    
    [root@CENTOS7-20200707 johnny]# echo "aa bb  cc : dd  ee ff" | awk -F ':' '{print $1}' 【F: 指定字段分隔符】
    aa bb  cc
    
    • FS(字段分隔符)

    默认: 空格,制表符

    $0 表示当前整行内容; $1,$ 2 表示第一个字段,第二个字段
    
    [root@CENTOS7-20200707 johnny]# echo "aa bb cc  dd" | awk '{ print $0}'
    aa bb cc  dd
    
    [root@CENTOS7-20200707 johnny]# echo "aa bb cc  dd" | awk '{ print $1}'
    aa
    

    wc

    为统计指定文件中的字节数、单词数、行数, 并将统计结果显示输出

    [root@CENTOS7-20200707 johnny]# cat /etc/passwd | wc -l    # 查看passwd文件有多少行
    22
    
    [root@CENTOS7-20200707 johnny]# echo "aaa bbb ccc" |wc -w    # 查看输出有多少个单词
    3
    
    [root@CENTOS7-20200707 johnny]# cat /etc/passwd | grep "root" | wc -l # 统计指定文件中出现"root"字符的总行数
    2
    
    [root@CENTOS7-20200707 johnny]# echo "12344hbjkl" |wc -m # 查看输出有多少个字符
    11
    

    xargs

    xargs 又称管道命令,构造参数等;
    xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理 。
    即 把其他命令的给它的数据 传递给它后面的命令作为参数

    [root@CENTOS7-20200707 johnny]# find /usr/sbin /7000 | xargs ls -l [找出/usr/sbin下具有特殊权限7000的文件名,并使用ls -l列出详细属性]
    
    [root@localhost ~]# ls | grep .php | xargs -i mv {} {}.bak     [将当前目录下php文件,改名字]
    (参数-i :  {} 代替 传递的数据)
    
    

    参考文献

  • 相关阅读:
    基础DP(初级版)
    UVA-816.Abbott's Tevenge (BFS + 打印路径)
    1044: 数圈
    1049: 打牌
    1047: 小A的计算器
    1046: 最小的K个数
    1045: 愚人节的礼物
    1044: 数圈
    1043: 绩点计算
    1042: 小丑排序
  • 原文地址:https://www.cnblogs.com/johnnyzen/p/13437352.html
Copyright © 2011-2022 走看看