zoukankan      html  css  js  c++  java
  • shell四剑客入门

    一、            shell四剑客之(grep

    grep 抓取行

    正则表达式:

    [0-9]表示字符匹配0-9

    {1,3}表示匹配字符数量再3个以内。

    例一:

    [root@bogon bash]# cat test.txt      #源文件

    my name is lingshu

    MySQL install

    192.168.1.11

    192.168.2.

    10.28

    172.16.22.34

    hello word

    [root@bogon bash]# grep "^10" test.txt    #表示以10开头的行

    10.28

    [root@bogon bash]# grep "11$" test.txt    #表示以11结尾的行

    192.168.1.11

    [root@bogon bash]# grep "[0-9]" test.txt    #表示有匹配0-9字符的行

    192.168.1.11

    192.168.2.

    10.28

    172.16.22.34

    [root@bogon bash]# grep "[0-9][0-9]" test.txt   #表示匹配连续两个0-9的字符所在的行

    192.168.1.11

    192.168.2.

    10.28

    172.16.22.34

    [root@bogon bash]# grep "[0-9][0-9][0-9]" test.txt   #便是匹配连续三个0-9的字符所在的行

    192.168.1.11

    192.168.2.

    172.16.22.34

    [root@bogon bash]# grep "[a-z]" test.txt   #表示匹配所有小写字母所在的行

    my name is lingshu

    MySQL install

    hello word

    [root@bogon bash]# grep "^[a-z]" test.txt  #表示匹配以小写字母开头的行

    my name is lingshu

    hello word

    [root@bogon bash]# grep "^[A-Z]" test.txt  #表示匹配以大写字母开头的行

    MySQL install

    [root@bogon bash]# echo "168" >> !$

    echo "168" >> test.txt

    [root@bogon bash]# grep "168" test.txt

    192.168.1.11

    192.168.2.

    168

    [root@bogon bash]# grep "^168$" test.txt  #以168开头且结尾的行

    168

    [root@bogon bash]# cat test.txt | grep -E "[0-9]{1,3}"  连续一到三个数,并且是符合0-9

    192.168.1.11

    192.168.2.

    10.28

    172.16.22.34

    168

    [root@bogon bash]# cat test.txt | grep -E "[0-9]{1,3}."    #连续一到三个数,并且是符合0-9,且后跟小数点的数

    192.168.1.11

    192.168.2.

    10.28

    172.16.22.34

    [root@bogon bash]# cat test.txt | grep -E "([0-9]{1,3}.){3}"     ##连续一到三个数,并且是符合0-9,且后跟小数点的数 ;这样的数连续三次

    192.168.1.11

    192.168.2.

    172.16.22.34

    [root@bogon bash]# cat test.txt | grep -E "([0-9]{1,3}.){3}[0-9]{1,3}"    #连续一到三个数,并且是符合0-9,且后跟小数点的数 ;这样的数连续三次以后再加一个,一到三个0-9的数

    192.168.1.11

    172.16.22.34

    [root@bogon bash]# grep -E "192|lingshu" test.txt   #-E “参数1 |参数2” 表示匹配参数1或参数2的行。也可写成egrep “192 | lingshu” test.txt  

    my name is lingshu

    192.168.1.11

    192.168.2.

    二、            shell四剑客之(awk

    awk抓取列

    实例一:抓取IP

    [root@bogon bash]# cat ip.txt

    localhost 127.0.0.1 24

    guanli 192.168.3.2 24

    yewu 192.168.4.9 24

    mysql 172.16.10.10 24

    [root@bogon bash]# awk '{print $2}' ip.txt    #$2表示抓取第二列 $NF表示最后一列。

    127.0.0.1

    192.168.3.2

    192.168.4.9

    172.16.10.10

    [root@bogon bash]# awk '{print "ip:"$2}' ip.txt   #支持加注释

    ip:127.0.0.1

    ip:192.168.3.2

    ip:192.168.4.9

    ip:172.16.10.10

    例二:分割抓取用户列表

    [root@bogon bash]# tail /etc/passwd

    setroubleshoot:x:993:990::/var/lib/setroubleshoot:/sbin/nologin

    pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin

    gdm:x:42:42::/var/lib/gdm:/sbin/nologin

    gnome-initial-setup:x:992:987::/run/gnome-initial-setup/:/sbin/nologin

    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

    avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin

    postfix:x:89:89::/var/spool/postfix:/sbin/nologin

    ntp:x:38:38::/etc/ntp:/sbin/nologin

    tcpdump:x:72:72::/:/sbin/nologin

    lingshu:x:1000:1000:LingShu:/home/lingshu:/bin/bash

    [root@bogon bash]# tail /etc/passwd | awk -F: '{print $1}'  #-F:表示以冒号:做分割

    setroubleshoot

    pulse

    gdm

    gnome-initial-setup

    sshd

    avahi

    postfix

    ntp

    tcpdump

    lingshu

    [root@bogon bash]# tail -n 2 /etc/passwd | awk -F: '{print $1}' > user.txt  #抓去最后两个并生成用户列表

    [root@bogon bash]# cat !$

    cat user.txt

    tcpdump

    lingshu

    三、            shell四剑客之(sed

    sed更改字符

    表示符:

    /lingshu     #表示匹配翎戍

    s/lingshu     #加s表示匹配所有翎戍

    ^            #表示行首

    $            #表示行尾

    /g           #表示更改

    /a           #表示在行后

    /i            #表示在行前

               #表示换行

    grep     表示筛选。-v参数表示筛选相反值。

    p   [print]  #表示打印

    sort    #表示排序。默认按首字符排序。-nr表示从大到小排

    例一:

    [root@bogon bash]# cat test.txt    #源文件

    my name is lingshu

    this is my first sciptis!

    192.168.1.11

    192.168.2.23

    172.16.22.34

    hello word

    [root@bogon bash]# sed 's/192.168/172.16/g' test.txt    #表示将所有的192.168替换为172.16 

    my name is lingshu

    this is my first sciptis!

    172.16.1.11

    172.16.2.23

    172.16.22.34

    hello word

    [root@bogon bash]# sed 's/^/id /g' test.txt    #表示将行首替换为id空格。(空行也添加)    

    id my name is lingshu

    id

    id this is my first sciptis!

    id 192.168.1.11

    id 192.168.2.23

    id

    id 172.16.22.34

    id hello word

    [root@bogon bash]# sed 's/$/ id/g' test.txt    #表示将在行尾添加空格id(同样空行也添加)

    my name is lingshu id

     id

    this is my first sciptis! id

    192.168.1.11 id

    192.168.2.23 id

     id

    172.16.22.34 id

    hello word id

    [root@bogon bash]# sed 's/^/# /g' test.txt     #实用:全部注释

    # my name is lingshu

    #

    # this is my first sciptis!

    # 192.168.1.11

    # 192.168.2.23

    #

    # 172.16.22.34

    # hello word

    [root@bogon bash]# sed '/lingshu/a 333333333333' test.txt  #表示匹配到lingshu,然后在翎戍的行后添加一行333333333333333

    my name is lingshu

    333333333333

    this is my first sciptis!

    192.168.1.11

    192.168.2.23

    172.16.22.34

    hello word

    [root@bogon bash]# sed '/lingshu/i 333333333333' test.txt #表示匹配到lingshu,然后在翎戍的行前添加一行333333333333333

    333333333333

    my name is lingshu

    this is my first sciptis!

    192.168.1.11

    192.168.2.23

    172.16.22.34

    hello word

    [root@bogon bash]# cat test.txt

    my name is lingshu

    this is my first sciptis!

    192.168.1.11

    192.168.2.23

    172.16.22.34

    hello word

    然而我们发现与源文件并没有什么不一样。这些只是缓存生成,预修改。并没有真正的更改。如果需要真正的修改,需要加-i 参数。

     例二:-n+p 的方式打印输出

    [root@bogon bash]# sed -n '/lingshu/p' test.txt    #打印带有lingshu这一行

    my name is lingshu

    [root@bogon bash]# sed -n '1p' test.txt     #1p表示打印第一行

    my name is lingshu

    [root@bogon bash]# sed -n '1,4p' test.txt    #表示打印1-4行

    my name is lingshu

    this is my first sciptis!

    192.168.1.11

    [root@bogon bash]# sed -n '1p;4p' test.txt  #分号表示打印第一行和第四行

    my name is lingshu

    192.168.1.11

    例三:查找文件中最大和最小的数字

    [root@bogon bash]# cat number.txt    #源文件

    123

    345 45 5

    1324

    12 4354 253

    24  4253

    131   24

    [root@bogon bash]# cat number.txt | sed 's/ / /g'     #首先将空格替换成换行。

    123

    345

    45

    5

    1324

    12

    4354

    253

    24

    4253

    131

    24

    [root@bogon bash]# cat number.txt | sed 's/ / /g' | grep -v "^$"  #表示筛选出空格

    123

    345

    45

    5

    1324

    12

    4354

    253

    24

    4253

    131

    24

    [root@bogon bash]# cat number.txt | sed 's/ / /g' | grep -v "^$" | sort   sort表示排列。默认按首字符排

    12

    123

    131

    1324

    24

    24

    253

    345

    4253

    4354

    45

    5

    [root@bogon bash]# cat number.txt | sed 's/ / /g' | grep -v "^$" | sort -nr #参数-nr表示从大到小排

    4354

    4253

    1324

    345

    253

    131

    123

    45

    24

    24

    12

    5

    [root@bogon bash]# cat number.txt | sed 's/ / /g' | grep -v "^$" | sort -nr |sed -n '1p;$p'排完再用sed取第一行和最后一行的值。

    4354

    5

    综合一:抓取网卡ens33的IP地址

    [root@bogon bash]# ifconfig ens33

    ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

            inet 172.16.200.99  netmask 255.255.248.0  broadcast 172.16.207.255

            inet6 fe80::21cb:60a3:1caa:d4c9  prefixlen 64  scopeid 0x20<link>

            ether 00:0c:29:51:c5:f6  txqueuelen 1000  (Ethernet)

            RX packets 1280778  bytes 95144158 (90.7 MiB)

            RX errors 0  dropped 37  overruns 0  frame 0

            TX packets 2276  bytes 141670 (138.3 KiB)

            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

     [root@bogon bash]# ifconfig ens33 |grep "netmask"  #确定行

            inet 172.16.200.99  netmask 255.255.248.0  broadcast 172.16.207.255

     [root@bogon bash]# ifconfig ens33 |grep "netmask" |awk '{print $2}'  确定列

    172.16.200.99

    案例二:抓取跟目录的使用率不要%

    [root@bogon bash]# df -h

    文件系统                 容量  已用  可用 已用% 挂载点

    /dev/mapper/centos-root   30G   13G   18G   41% /

    devtmpfs                 2.0G     0  2.0G    0% /dev

    tmpfs                    2.0G     0  2.0G    0% /dev/shm

    tmpfs                    2.0G  9.1M  2.0G    1% /run

    tmpfs                    2.0G     0  2.0G    0% /sys/fs/cgroup

    /dev/mapper/centos-home  5.8G   39M  5.8G    1% /home

    /dev/sda1                197M  139M   59M   71% /boot

    tmpfs                    394M   36K  394M    1% /run/user/0

    [root@bogon bash]# df -h | grep "/$"   #确定行

    /dev/mapper/centos-root   30G   13G   18G   41% /

    [root@bogon bash]# df -h | grep "/$" | awk '{print $5}'   #确定列

    41%

    [root@bogon bash]# df -h | grep "/$" | awk '{print $5}'|sed 's/%//g'  #将%替换成空格

    41    #最终需要的数值。

    四、            shell四剑客之(find

    find查找文件

    参数:

    -maxdepth  表示目录级别

    -name      表示按文件名查找

    -type       表示文件类型 -f普通文件 -d目录

    -mtime      按照修改时间 +30表示30天以前 -30表示30天以内

    -size        表示按大小查找。+20M大于20M的文件。

    承接命令:-exec

    用法格式:

    -exec [命令] {} ;    查找文件后跟-exec表示承接,后跟要操作的命令 {}:查找到的结果,;反斜杠分号结尾。

    例一:查找当前目录下.txt结尾的文件并移到/document目录下 

    [root@bogon bash]# find . -name "*.txt"

    ./number.txt

    ./test.txt

    ./ip.txt

    ./user.txt

    [root@bogon bash]# find . -name "*.txt" -exec mv {} /document/ ;

    [root@bogon bash]# ls /document/

    bash  ip.txt  number.txt  test  test.txt  user.txt  yum.repo.d

    [root@bogon bash]# ls

    array.sh

    例二:删除当前目录下30天以前的文件

    [root@bogon bash]# find . -mtime +30 -exec rm -rf {} ;

    xargs 与-exec类似;

    区别,可能是一个用于目录一个用于文件

    [root@bogon test]# find . -maxdepth 1 -size +20M -exec cp {} / ;

    [root@bogon test]# find . -maxdepth 1 -size +20M | xargs cp {} / ;

    cp: 目标"./mysql-5.7.13.tar.gz" 不是目录

  • 相关阅读:
    极客标签编程小挑战#31:生成注册页面的显示效果
    极客Web前端开发资源大荟萃#017
    知道你们不想撸代码写PPT之可视化页面做一款炫酷的WEB PPT
    使用jQuery图表插件Sparklines来开发一个实用的网站PV(page view)实时监控应用
    javascript专业八级测试答案整理
    使用Raphaël类库实现的超酷动画技能图表
    极客编程小挑战#26:实现日期级联下拉选择框
    gulp初印象
    程序语言,编译?解释?
    发了这嘛多技术文章,今天给大家点福利吧!邻家小美女一枚,想在北京找个工作,大家来看看给出点主意。
  • 原文地址:https://www.cnblogs.com/lingshu/p/8973595.html
Copyright © 2011-2022 走看看