Day03-linux四剑客

一、Linux 三剑客

1、grep (老三) 过滤筛选信息

  例如:筛选2.txt 文件中com的信息

1 [root@localhost ~]# grep "com" 2.txt 
2 www.mmm.com
3 www.111.com

   -A -B -C  加上阿拉伯数字

   -A 是显示匹配后和它后面的n行

   -B 是显示匹配行和它前面的n行

   -C 是匹配行和它前后各n行
   -c  统计出现次数

1 [root@localhost ~]# grep -B 2 "com" 2.txt 
2 #www.baidu.Neal
3 #www.baidu.Neal
4 www.mmm.com
5 www.111.com
1 [root@localhost ~]# grep -A 2 "com" 2.txt 
2 www.mmm.com
3 www.111.com
4 www.2222.con
5 www.3333.com
6 www.wewe.chk
7 www.sina.cn
1 [root@localhost ~]# grep -C 2 "com" 2.txt 
2 #www.baidu.Neal
3 #www.baidu.Neal
4 www.mmm.com
5 www.111.com
6 www.2222.con
7 www.3333.com
8 www.wewe.chk
9 www.sina.cn
1 [root@localhost ~]# grep -c  "com" 2.txt 
2 3

2、sed  (老二)修改替换文件内容、擅长对文件中的行进行操作

  -n选项:只显示匹配处理的行(否则会输出所有)(也就是关闭默认的输出)

  -p选项:打印

1 [root@localhost ~]# sed -n "/com/p" 2.txt 
2 www.mmm.com
3 www.111.com
4 www.3333.com

  2.1、修改文件部分内容信息

    sed  s###g  file  前面两个#中的是原内容,后两个#中的是替换的内容

    sed -i s###g 改变文件内容(可将 -i 理解成insert)

    vim替换内容  :%s#cn#sed#g

    tr命令:替换内容 被替换的字符与替换的字符数必须是相等的

    01、替换的内容字符数>修改后内容字符数   abcd>123 

           [root@localhost ~]# echo abcd | tr "abcd" "123"
           1233 

    02、替换的内容字符数<修改后内容字符数   abc<1234       

                           [root@localhost ~]# echo abcd | tr "abc" "1234"
                           123d

    03、替换的内容字符数=修改后内容字符数    bac=123

        [root@localhost ~]# echo abcd | tr "abcd" "1234"
                           1234

    04、 极特殊情况

       abcba  12345

       a -1;b-2;c-3;b-4;a-5 

       替换效果:54345

1 [root@localhost ~]# echo 123 | tr "123" "abc"
2 abc
1 [root@localhost ~]# sed -i s#cn#sed#g  2.txt 
2 [root@localhost ~]# cat 2.txt 
3 #www.163.sed
4 #www.9ku.Neal

3、awk  (老大) 擅长统计分析文件内容、擅长对文件中列进行操作

1 [root@localhost ~]# awk "/cn/" 2.txt 
2 #www.163.cn
3 www.sina.cn

4、老四find快速查找数据信息命令

  find 寻找路径范围 :

    -tyep  d 查找文件目录文件

     -f   普通文件

         -name 文件名称

     find 路径信息 -type 文件类型 -name  "文件名"

   忽略大小写查找:find 路径信息 -tyep 文件类型  -iname "文件名"

   根据数据大小查找文件数据:find 路径信息 -type -f -size  +100

    深入层次查找 find /oldboy -maxdepth 1 type f  -name "文件名"

    指定解压到某个路径:tar zxvf /tmp/oldboy.tar.gaz  -C /oldboy

5、tree查看目录下的信息

  tree -L  2 /etc/   显示两层目录结构层级信息

  tree -d  /   显示目录中所有结构信息

6、tar zcvf 压缩

  z :压缩的方式 为zip

  c :创建压缩包

  v:  显示压缩过程

  f :  指定压缩包文件路径信息

       tar zcvf  要存放的路径  |  指定要压缩的数据文件

  检查是否压缩正常:移动源数据,使用压缩包恢复

  解压:tar zxvf  压缩包的文件路径  |  要解压的路径

  查看压缩信息:

1 [root@localhost ~]# tar tf /opt/test.backup 
2 1.txt

  tar命令排出不需要压缩的文件

 1 [root@localhost oldboy01]# ll
 2 total 0
 3 drwxr-xr-x 2 root root 6 Sep 14 19:58 oldboy
 4 -rw-r--r-- 1 root root 0 Sep 14 19:58 oldboy.avi
 5 -rw-r--r-- 1 root root 0 Sep 14 19:58 oldboy.jpg
 6 -rw-r--r-- 1 root root 0 Sep 14 19:59 oldboy.png
 7 [root@localhost oldboy01]# pwd
 8 /root/oldboy01
 9 
10 [root@localhost oldboy01]# tar zcvf /tmp/oldboy.tar.gz /root/oldboy01 --exclude=/root/oldboy01/oldboy.avi
11 tar: Removing leading `/' from member names
12 /root/oldboy01/
13 /root/oldboy01/oldboy/
14 /root/oldboy01/oldboy.jpg
15 /root/oldboy01/oldboy.png

  首先编写好排除文件:

1 [root@localhost oldboy01]# cat /tmp/path.txt 
2 /root/oldboy01/oldboy.png
3 /root/oldboy01/oldboy.avi
4 /root/oldboy01/oldboy.png

    排出多个文件

1 [root@localhost oldboy01]# tar zcvf /tmp/oldboy.tar.gz /root/oldboy01 --exclude-from=/tmp/path.txt
2 tar: Removing leading `/' from member names
3 /root/oldboy01/
4 /root/oldboy01/oldboy/
5 /root/oldboy01/oldboy.jpg
6 [root@localhost oldboy01]# cat /tmp/path.txt 
7 /root/oldboy01/oldboy.png
8 /root/oldboy01/oldboy.avi
9 /root/oldboy01/oldboy.png

       压缩某目录下的所有.txt文件,并检查压缩文件是否正常、删除原有数据,在 恢复数据

  find  /root/oldboy -maxdepth 1 -type f -name "*.txt"  | xargs tar zcvf /oldboy/oldboy.tar.gz

find /oldboy/ -type f -name "*.txt" | xargs tar zcvf /tmp/oo.tar.gz
恢复压缩文件
tar zxvf /tmp/oo.tar.gz -C /oldboy/
另一种方法
tar zcvf /tmp/oo.tar.gz ‘find /oldboy/ -type f -name "*.txt"

  find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部

  xargs要处理的文件如果不是在结尾,需要加上 -i这个参数

  在/var/log/下查找log文件,复制文件到/home/omc/ftl且把结果保存到/home/omc/ftl/logs.txt文件中

1 [root@localhost log]# find /var/log/*.log -type f | xargs -i cp {} /home/omc/ftl
2 [root@localhost log]# ll -ltr /home/omc/ftl
3 [root@localhost log]# find /var/log/*.log -type f > /home/omc/ftl/logs.txt
4 [root@localhost log]# ll /home/omc/ftl/logs.txt 

 

7、diff 对比文件差异

  vimdiff 1.txt  /etc/services

  diff  1.txt  /etc/services 

二、for循环

批量创建用户

1、for num in {01..10};do useradd Neal$num;done

2、 echo 123456 | passwd -- stdin  用户名  (可以使用分号;连接两个命令)

 

三、正则表达

1、. 点符号   

    匹配任意一个字符,且只有一个字符

     例如:grep "."  oldboy01.txt  -o   显示匹配过程

    星符号*

      匹配任意0和或多个以上连续的字符

           匹配前一个字符连续出现了0次或者多次

    .* 点和星结合

      匹配任意所有信息      

1 [root@localhost oldboy]# grep "^b.*i$" oldboy01.txt 
2 bai

   \ 转义符号:

     将文件中的以,结果的信息进行过滤

     将没有意义的信息转义普通信息进行识别

     将没有意思的信息转义为有特殊意义的信息

     \n  换行符号

     \r   换行符号

      \t   制表符号

      echo -e  "test01\ntest02" >> test.txt  扩展

2、括号符号:[]

    匹配多个字符信息(一个字符匹配)    

1 [root@localhost oldboy]# grep "^[wwwb]" oldboy01.txt 
2 boy    name    neal
3 www.baidu.com;9ku.com

  排 除符号:^

  括号和尖号组合[^]  排除abc信息 grep "[^abc]"

 

扩展正则符号:默认grep sed 不能直接识别

    grep提升自己egrep/grep -E

    sed提升自己sed -r

 

3、+号符号:

    表示前一个字符连续出现了1次或多次以上

1 [root@localhost oldboy]# egrep "0+" oldboy01.txt 
2 0011
3 0101

 

4、| 竖线符号

    并且符号,用于匹配多个信息(一个字符串匹配)

  括号符号()

    1、指定信息进行整体匹配

      

1 [root@localhost oldboy]# grep -E "oldb(oe)y" oldboy01.txt 
2 my god ,i am not oldboey,but
3 
4 ()将里面的信息看做整体

    2、进行后项引用前项使用  \1  保留前项,引用 

1 [root@localhost oldboy]# echo oldboy{01..04} | xargs -n1
2 oldboy01
3 oldboy02
4 oldboy03
5 oldboy04  
[root@localhost oldboy]# echo oldboy{01..04} | xargs -n1 | sed -r 's#(.*)#useradd \1#g'
useradd oldboy01
useradd oldboy02
useradd oldboy03
useradd oldboy04   
[root@localhost oldboy]# echo oldboy{01..04} | xargs -n1 | sed -r 's#(.*)#useradd \1#g'|bash

批量创建用户
1 [root@localhost oldboy]# seq -w 5
2 01
3 02
4 03
5 04
6 05
7 批量设置用户密码
 1 [root@localhost oldboy]# seq -w 10 | sed -r 's#(.*)#useradd oldboy\1;echo 123456 |passwd --stdin oldboy\1#g'
 2 useradd oldboy01;echo 123456 |passwd --stdin oldboy01
 3 useradd oldboy02;echo 123456 |passwd --stdin oldboy02
 4 useradd oldboy03;echo 123456 |passwd --stdin oldboy03
 5 useradd oldboy04;echo 123456 |passwd --stdin oldboy04
 6 useradd oldboy05;echo 123456 |passwd --stdin oldboy05
 7 useradd oldboy06;echo 123456 |passwd --stdin oldboy06
 8 useradd oldboy07;echo 123456 |passwd --stdin oldboy07
 9 useradd oldboy08;echo 123456 |passwd --stdin oldboy08
10 useradd oldboy09;echo 123456 |passwd --stdin oldboy09
11 useradd oldboy10;echo 123456 |passwd --stdin oldboy10

  将输出的信息

  echo 123456==> 转换为 <123456>进行显示 

[root@localhost oldboy]# echo 12345 | sed -r 's#([1-5])#<\1>#g'
<1><2><3><4><5>
[root@localhost oldboy]# echo 12345 | sed -r 's#([1-5]+)#<\1>#g'
<12345>

  echo 123456==> 转换为<12><34><56>

1 [root@localhost oldboy]# echo 123456 | sed -r 's#(12)(34)(56)#<\1><\2><\3>#g'
2 <12><34><56>

    3、括号符号:{}

      可以指定字符连续匹配的次数

      x{n,m} 表示前一个字符至少连续出现n次,最多出现m次    

1 [root@localhost oldboy]# grep -E "0{2,3}" oldboy01.txt 
2 0011

        x{n,} 表示前一个字符至少连续出现n次,最多出现多少次不限制     

1 [root@localhost oldboy]# grep -E "0{2,}" oldboy01.txt 
2 0011
3 000000000
4 0000

      x{,m}: 表示前一个字符至少连续出现0次,最多出现m次

1 [root@localhost oldboy]# grep -E "0{,2}" oldboy01.txt -o
2 00
3 0
4 0
5 00

    4、问号符号?

      定义匹配前一个字符出现0或者1次

    总结:

      * 匹配前一个字符出现0次或者多次

      + 匹配前一个字符出现1次或者多次(连续)

      {} 匹配前一个字符指定出现多少次,至少0次

      ?匹配前一个字符出现0次或者1次    

1 [root@localhost oldboy]# ip addr show ens33 | grep -E "[0-9]+.[0-9]+.[0-9]+.[0-9]+" -o | head 
2 -1
3 192.168.145.132
4 
5 查看ip

1 [root@localhost oldboy]# ip addr show ens33 |egrep "([0-9]+\.[0-9]+){3}" -o | head -1
2 192.168.145.132
3 
4 取出IP地址
===================================================================================================================================================
 1 课程知识回顾
 2     1) 正则符号
 3     基础正则符号:
 4     ^  以什么开头的信息进行匹配  ^oldboy
 5     $  以什么结尾的信息进行匹配  oldboy$
 6     ^$ 表示匹配空行信息
 7     .  匹配任意一个且只有一个字符 grep "." 
 8     *  匹配前一个字符连续出现0次或者多次
 9     .* 匹配所有任意信息 类似于通配符*
10     \  将有意义的字符信息,转义成普通字符进行识别  
11        --> 找出文件中以点结尾的信息    
12        将特殊的扩展正则符号,转换成基础正则符号
13        将没有意义的字符信息转成有意义的字符
14        \n \r \t
15     [] 匹配多个字符信息,多个字符匹配时,是或者的关系
16        [ok] 在文件中找有O的字符信息 找文件中有k的字符信息
17        PS: 将一个字符串信息,进行拆分成一个一个的字符进行匹配
18    [^] 对匹配的字符信息进行排除
19        [^ok]  在文件中找有O的字符信息 找文件中有k的字符信息,进行排除不要显示,显示其他信息
20        [^o^k]        
21     
22     扩展正则符号:
23     +  匹配前一个字符连续出现1次或者多次
24     |  利用竖线可以匹配多个字符串信息
25     () 将多个字符信息汇总成整体,进行过滤
26        进行后项引用前项  (oldboy) \1--sed  
27     {} 指定匹配前一个字符连续出现了多少次  
28        {n,m} 至少连续n次,最多连续m次
29        {n}     匹配只连续n次的信息
30        {n,}  至少连续n次,最多不限
31        {,m}     至少连续0次,最多m次  
32     ?  匹配前一个字符连续出现0次或者1次 
33      
34     grep命令识别扩展正则: egrep -E
35     sed命令识别扩展正则:  sed -r 
posted @ 2020-09-24 16:27  龙门、三少  阅读(195)  评论(0编辑  收藏  举报