美文网首页
linux三剑客

linux三剑客

作者: 0981b16f19c7 | 来源:发表于2019-08-07 16:15 被阅读0次

    grep

    1)缺点:不能对已知结果进行更改。
    2)常用命令

    查找指定进程和个数

    [root@VM_0_15_centos ~]# ps -ef | grep mysql
    [root@VM_0_15_centos ~]# ps -ef | grep -c mysql
    2.2)查找多个文件相同的部分(每行比较)
    [root@VM_0_15_centos demo]# cat 1.txt | grep -f 2.txt

    从单个文件或多个文件查找指定内容并显示行号

    [root@VM_0_15_centos demo]# cat 1.txt | grep 1 -n
    1:我是相同的内容1
    2:我是不同的内容1

    指定字符串查找开头,非开头和结尾的内容

    指定字符串开头:
    [root@VM_0_15_centos demo]# grep "^a" 1.txt
    a开头
    非指定字符串开头:
    [root@VM_0_15_centos demo]# grep "[a]" 1.txt
    我是b同的内容1
    我是相同的内容2结尾c
    我是不同的内容2
    指定字符串结尾:
    [root@VM_0_15_centos demo]# grep "c$" 1.txt
    我是相同的内容2结尾c

    过滤指定日志里面的ip个数

    [root@VM_0_15_centos demo]# cat 1.txt | grep -c "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}"
    3
    [root@VM_0_15_centos demo]# cat 1.txt | grep "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}"
    10.10.20.138
    我是相同的内10.10.20.134容2结尾c
    10.10.20.139

    过滤指定路径下所有文件里面包含指定字符内容

    [root@VM_0_15_centos demo]# grep -r -n "10.10.20" 1.txt
    1:10.10.20.138
    3:我是相同的内10.10.20.134容2结尾c
    4:10.10.20.139

    显示文件总行数

    [root@VM_0_15_centos demo]# grep -n "" 1.txt
    1:root
    2:
    3:root:X:sdsdsd
    4:
    5:我是相同的内10.10.20.134容2结尾c
    6:root`
    7:
    8:
    9:

    sed

    1、sed默认不编辑原文件,而是逐行操作,复制一份到指定内存(模式空间);
    2、模式空间内进行模式匹配,即和指定条件做匹配:
    不满足,输出到标准输出;
    满足:进行指定的模式操作,再输出到标准输出;
    3、命令行:[root@www ~]# sed [-nefr] [动作]
    常用命令:

    将文件内容列出并且列印行号,同时将第2~3行删除

    [root@VM_0_15_centos demo]# nl 1.txt | sed '2,3d'
    1 10.10.20.138
    4 10.10.20.139
    删除第2行到最后一行
    [root@VM_0_15_centos demo]# nl 1.txt | sed '2,$d'
    1 10.10.20.138
    删除第2行
    [root@VM_0_15_centos demo]# cat -n 1.txt | sed '2d'
    1 10.10.20.138
    3 我是相同的内10.10.20.134容2结尾c
    4 10.10.20.139

    在第2行后(即加上第3行)加上‘drink tea’

    [root@VM_0_15_centos demo]# cat -n 1.txt | sed '2adrink tea'
    1 10.10.20.138
    2 我是b同的内容1
    drink tea
    3 我是相同的内10.10.20.134容2结尾c
    4 10.10.20.139
    在第2行前加上‘drink tea’
    [root@VM_0_15_centos demo]# cat -n 1.txt | sed '2idrink tea'
    1 10.10.20.138
    drink tea
    2 我是b同的内容1
    3 我是相同的内10.10.20.134容2结尾c
    4 10.10.20.139
    在第2行后增加两行
    [root@VM_0_15_centos demo]# cat -n 1.txt | sed '2adrink tea or \

    drink beer'
    1 10.10.20.138
    2 我是b同的内容1
    drink tea or
    drink beer
    3 我是相同的内10.10.20.134容2结尾c
    4 10.10.20.139
    将2-3行的内容提还调
    [root@VM_0_15_centos demo]# cat -n 1.txt | sed '2,3c asasas'
    1 10.10.20.138
    asasas
    4 10.10.20.139
    将2-3行的内容显示出来
    [root@VM_0_15_centos demo]# cat -n 1.txt | sed -n '2,3p'
    2 我是b同的内容1
    3 我是相同的内10.10.20.134容2结尾c

    查找指定行区间以XX开头的内容

    [root@VM_0_15_centos demo]# sed -n '1,4{/^root/p}' 1.txt
    root
    root:X:sdsdsd
    root`

    匹配行之后增加显示内容

    [root@VM_0_15_centos demo]# sed -n '/3/,$p' 1.txt
    我是相同的内10.10.20.134容2结尾c
    root`
    [root@VM_0_15_centos demo]# sed -n '/3/,+1p' 1.txt
    我是相同的内10.10.20.134容2结尾c
    root

    文本逆序输出(行逆序)

    [root@VM_0_15_centos demo]# sed '1!G;h;$!d' 1.txt
    root`
    我是相同的内10.10.20.134容2结尾c
    root:X:sdsdsd
    root

    显示行号

    显示空行
    [root@VM_0_15_centos demo]# sed '=' 1.txt
    屏蔽空行
    [root@VM_0_15_centos demo]# sed '/./=' 1.txt

    显示文件总行数

    [root@VM_0_15_centos demo]# sed -n "$=" 1.txt
    9

    显示偶数和奇数行

    偶数行
    [root@VM_0_15_centos demo]# sed -n 'n;p' 1.txt
    [root@VM_0_15_centos demo]# sed -n '2~2p' 1.txt
    奇数行
    [root@VM_0_15_centos demo]# sed -n 'p;n' 1.txt
    [root@VM_0_15_centos demo]# sed -n '1~2p' 1.txt

    文件中每行内容逆向显示

    [root@VM_0_15_centos demo]# cat 1.txt | sed '/\n/!G;s/(.)(.*\n)/&\2\1/;//D;s/.//'

    指定内容替换(将root全部替换成mysql)

    [root@VM_0_15_centos demo]# cat 1.txt | sed 's/root/mysql/g'

    awk

    1)支持过滤方式“列”匹配
    2)可以嵌套循环使用
    3)内置变量
    FS 保存或设置分隔符,例如FS=",";
    N 指定分隔符的第N个字段,例如1,5代表第一列和第三列;0 当前读入整行的文本内容;
    NF 记录当前处理行的字段个(列)数;
    NR 记录当前处理行的数量;
    FNR 保存当前处理行在原文本内的行号;
    FILENAME 当前处理的文本名;
    ENVIRON 调用shell环境变量。
    4)语法:

    awk [选项参数] 'script' var=value file(s)
    或
    awk [选项参数] -f scriptfile var=value file(s)###列匹配(列以空格或tab分割)
    

    展示所有内容
    [root@VM_0_15_centos demo]# cat 1.txt | awk '{print 0}' 展示第一列 [root@VM_0_15_centos demo]# cat 1.txt | awk '{print1}'

    查找当前剩余内存

    free | grep Mem | awk '{print"当前剩余内存:\n",$7}'

    访问IP过滤

    grep "Accepted" /var/log/secure | awk '{print $11}'

    统计每行有多少列

    [root@VM_0_15_centos demo]# cat 1.txt | awk '{print NF}'

    统计root出现的次数

    [root@VM_0_15_centos demo]# cat 1.txt | awk -F[:/] '{i=1}{while(i<=NF){if($i~/root/){j++};i++}}END{print j}'

    将列以[,]分割,然后展示第1列和第2列

    [root@VM_0_15_centos demo]# cat 2.txt | awk -F '[,]' '{print 1,2}'

    定义变量,将列以[,]分割,然后展示第1列和第1+a列

    [root@VM_0_15_centos demo]# cat 2.txt | awk -F '[,]' -va=1 '{print 1,(1+a)}'

    将列以[,]分割,并将第1列大于2的行输出

    [root@VM_0_15_centos demo]# cat 2.txt | awk -F '[,]' '$1>2'

    将列以[,]分割,并将第1列等于2的行输出

    [root@VM_0_15_centos demo]# cat 2.txt | awk -F '[,]' '1==2' 2,3,4,56,7 将列以[,]分割,并将第1列等于2的行的第1和3列输出 [root@VM_0_15_centos demo]# cat 2.txt | awk -F '[,]' '1==2 {print 1,3}'
    2 4

    [root@VM_0_15_centos demo]# cat 2.txt | awk -F '[,]' '{print NR,FNR,1,2,$3}'
    输出包含th的行
    [root@VM_0_15_centos demo]# cat 2.txt | awk '/th/'

    打印99乘法表

    [root@VM_0_15_centos demo]# seq 9 | sed 'H;g' | awk -v RS='' '{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")}'
    1x1=1
    1x2=2 2x2=4
    1x3=3 2x3=6 3x3=9
    1x4=4 2x4=8 3x4=12 4x4=16
    1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
    1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
    1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
    1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
    1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81

    相关文章

      网友评论

          本文标题:linux三剑客

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