Linux命令(二)

1、文本处理命令sed:

  1. 替换
    1. sed "s/原数据/新数据/" ⽂件名,仅把每⾏的第⼀个"原数据"替换为"新数据",不对原⽂件操作。
      [root@localhost ~]# cat a12.txt
      I love you
      you love me
      Do you love me?
      [root@localhost ~]# sed "s/I/o/" a12.txt
      o love you
      you love me
      Do you love me?
    2. sed "s/原数据/新数据/g" 文件名,仅把每行的所有"原数据"替换为"新数据",不对原文件进行操作。
      [root@localhost ~]# cat a12.txt
      I love you
      you love me
      Do you love me?
      [root@localhost ~]# sed "s/o/I/g" a12.txt
      I lIve yIu
      yIu lIve me
      DI yIu lIve me
    3. sed "s/原数据/新数据/gi"文件名,仅把每行的所有的不区分大小写的"原数据"替换为"新数据",不对原文件进行操作。
      [root@localhost ~]# cat a12.txt
      I love you
      you love me
      Do you love me?
      Only you
      [root@localhost ~]# sed "s/o/I/gi" a12.txt
      I lIve yIu
      yIu lIve me
      DI yIu lIve me?
      Inly yIu
    4. sed "s/^s*//" 文件名,把每行开头的空白字符删掉   \s匹配空白字符。
      [root@localhost ~]# cat a12.txt
                                    I love you
                  you love me
                     Do you love me?
              Only you
      [root@localhost ~]# sed "s/^\s*//" a12.txt
      I love you
      you love me
      Do you love me?
      Only you
  2. 插入
    1. sed "i行数据" 文件名,在文件中每行的上面插入"行数据"。

      [root@localhost ~]# cat a12.txt
      I love you
      you love me
      Do you love me?
      [root@localhost ~]# sed "i I love you" a12.txt
      I love you
      I love you
      I love you
      you love me
      I love you
      Do you love me?
      [root@localhost ~]#

    2. sed "ni行数据" 文件名,在文件中第n行的上面插入"行数据"。
      [root@localhost ~]# cat a12.txt
      I love you
      you love me
      Do you love me?
      [root@localhost ~]# sed "2i Do you know?" a12.txt
      I love you
      Do you know?
      you love me
      Do you love me?
    3. sed "a 行数据"文件名,在文件中每行的下面插入"行数据"。
      [root@localhost ~]# cat a12.txt
                                    I love you
                  you love me
                     Do you love me?
              Only you
      [root@localhost ~]# sed "a Do you know?" a12.txt
                                    I love you
      Do you know?
                  you love me
      Do you know?
                     Do you love me?
      Do you know?
              Only you
      Do you know?
    4. sed "na 行数据" 文件名,在文件中第n行的下面插入"行数据"。
      1. 插入到最后一行sed '$a aaa' a1.txt
      2. [root@localhost ~]# cat a1.txt
        I love you
        you love me
        Do you love me?
        [root@localhost ~]# sed "2a Do you know" a12.txt
        I love you
        you love me
        Do you know
        Do you love me?
        [root@localhost ~]# sed "5a aaaa" a12.txt
        I love you
        you love me
        Do you love me?
        [root@localhost ~]# sed "`wc -l a1.txt | cut -d ' ' -f1`a aaaa" a12.txt
        I love you
        you love me
        Do you love me?
        aaaa
        [root@localhost ~]#
  3. 删除
    1. sed "/^$/d" 文件名,删除文件中的空行。
      [root@localhost ~]# cat a12.txt
      
      I love you
      
      you love me
      
      Do you love me?
      
      Only you
      
      [root@localhost ~]# sed "/^$/d" a12.txt
      I love you
      you love me
      Do you love me?
      Only you
    2. sed "nd" 文件名,删除指定行。
      [root@localhost ~]# cat a12.txt
      
      I love you
      
      you love me
      
      Do you love me?
      
      Only you
      
      [root@localhost ~]# sed "1d" a12.txt
      I love you
      
      you love me
      
      Do you love me?
      
      Only you
    3. sed 'n,$d' 文件名,删除文件中的第n行到末行,注意必须使用单引号。
      [root@localhost ~]# cat a12.txt
      
      I love you
      
      you love me
      
      Do you love me?
      
      Only you
      
      [root@localhost ~]# sed '4,$d' a12.txt
      
      I love you
    4. sed '$d' ⽂件名, 删除⽂件中末⾏ ,注意必须使⽤单引号。
      [root@localhost ~]# cat a12.txt
      
      I love you
      
      you love me
      
      Do you love me?
      
      Only you
      
      [root@localhost ~]# sed '$d' a12.txt
      
      I love you
      
      you love me
      
      Do you love me?
      
      Only you
    5. sed "/^数据/d" ⽂件名, 删除⽂件中以指定的数据开头的行。
      [root@localhost ~]# cat a12.txt
      
      I love you
      
      you love me
      
      Do you love me?
      
      Only you
      
      [root@localhost ~]# sed "/^yo/d" a12.txt
      
      I love you
      
      
      Do you love me?
      
      Only you
  4. 增强
    1. sed -e "操作1" -e "操作2" .... ⽂件名, 对⽂件同时进行多步操作。
      [root@localhost ~]# cat a12.txt
      
      I love you
      
      you love me
      
      Do you love me?
      
      Only you
      
      [root@localhost ~]# sed -e "2a you love her" -e '/^$/d' a12.txt
      I love you
      you love her
      you love me
      Do you love me?
      Only you
    2. sed -i ....⽂件名 对指定⽂件进⾏修改。
      [root@localhost ~]# cat a12.txt
      
      I love you
      
      you love me
      
      Do you love me?
      
      Only you
      
      [root@localhost ~]# sed -i "/^$/d" a12.txt
      [root@localhost ~]# cat a12.txt
      I love you
      you love me
      Do you love me?
      Only you
      [root@localhost ~]#

2、文本处理命令awk

  1. 查找
    1. awk '/数据/{print}' ⽂件名, 在指定的⽂件中查找包含指定数据的行并输出。
      [root@localhost ~]# cat a12.txt
      
      I love you
      
      you love me
      
      Do you love me?
      
      Only you
      
      [root@localhost ~]# awk '/me/{print}' a12.txt
      you love me
      Do you love me?
    2. awk '!/数据/{print}' ⽂件名, 在指定的⽂件中查找不包含指定数据的行并输出。
      [root@localhost ~]# cat a12.txt
      
      I love you
      
      you love me
      
      Do you love me?
      
      Only you
      
      root@localhost ~]# awk '!/me/{print}' a12.txt
      
      I love you
      
      
      
      Only you
      
      [root@localhost ~]#
  2. 切割
    1. awk '{print $n,$m,....} ⽂件名, 在指定的⽂件中按空格或制表符切割后的第n,m个字段。
      [root@localhost ~]# cat aaa.txt
      aaa bbb ccc ddd eee fff
      aaa bbb ccc ddd eee fff
      aaa bbb ccc ddd eee fff
      aaa bbb ccc ddd eee fff
      aaa bbb ccc ddd eee fff
      [root@localhost ~]# awk '{print $2,$3}' aaa.txt
      bbb ccc
      bbb ccc
      bbb ccc
      bbb ccc
      bbb ccc
    2. awk -F'分割符1|分割符2|...' '{print $n,,,,,$NF}' ⽂件名, 在指定的⽂件中按指定的分割符切割后的指定第n个字段, NF表示最后⼀个字段。
      [root@localhost ~]# cat aaa.txt
      aaa bbb ccc ddd eee fff
      aaa bbb ccc ddd eee fff
      aaa bbb ccc ddd eee fff
      aaa bbb ccc ddd eee fff
      aaa bbb ccc ddd eee fff
      [root@localhost ~]# sed -i 's/ /,/g' aaa.txt
      [root@localhost ~]# cat aaa.txt
      aaa,bbb,ccc,ddd,eee,fff
      aaa,bbb,ccc,ddd,eee,fff
      aaa,bbb,ccc,ddd,eee,fff
      aaa,bbb,ccc,ddd,eee,fff
      aaa,bbb,ccc,ddd,eee,fff
      [root@localhost ~]# awk -F ',' '{print $2,$NF}' aaa.txt
      bbb fff
      bbb fff
      bbb fff
      bbb fff
      bbb fff
      [root@localhost ~]#
  3. 创建文件链接 ln 
    1. ln -s 原文件 软链接名,文件或目录均可实现,若原文件不存在则软件链接失败。
      [root@localhost ~]# ln -s a12.txt a.txt
      [root@localhost ~]# ll
      总用量 20
      -rw-r--r--. 1 root root   48 11月 14 14:34 a12.txt
      -rw-r--r--. 1 root root  120 11月 14 14:40 aaa.txt
      -rw-------. 1 root root 1463 7月  24 17:44 anaconda-ks.cfg
      lrwxrwxrwx. 1 root root    7 11月 14 14:56 a.txt -> a12.txt
      drwxr-xr-x. 2 root root   53 11月  9 15:01 java
      drwxr-xr-x. 2 root root    6 11月 14 09:13 kgcnews
      drwxrwxr-x. 7 root root   88 11月 14 09:12 qjt1
      drwxr-xr-x. 2 root root    6 11月  4 14:49 qjt2
      -rw-r--r--. 1 root root    0 11月 14 09:14 shell.txt
      drwxr-xr-x. 3 root root   18 11月  6 18:50 test
      -rw-r--r--. 1 root root  528 11月 11 15:55 test.txt
      -rw-r--r--. 1 root root  371 11月  9 10:57 ya1.tar.gz
      [root@localhost ~]# cat a12.txt
      I love you
      you love me
      Do you love me?
      Only you
      [root@localhost ~]# cat a.txt
      I love you
      you love me
      Do you love me?
      Only you
      [root@localhost ~]# ll
      总用量 20
      -rw-r--r--. 1 root root   48 11月 14 14:34 a12.txt
      -rw-r--r--. 1 root root  120 11月 14 14:40 aaa.txt
      -rw-------. 1 root root 1463 7月  24 17:44 anaconda-ks.cfg
      lrwxrwxrwx. 1 root root    7 11月 14 14:56 a.txt -> a12.txt
      drwxr-xr-x. 2 root root   53 11月  9 15:01 java
      drwxr-xr-x. 2 root root    6 11月 14 09:13 kgcnews
      drwxrwxr-x. 7 root root   88 11月 14 09:12 qjt1
      drwxr-xr-x. 2 root root    6 11月  4 14:49 qjt2
      -rw-r--r--. 1 root root    0 11月 14 09:14 shell.txt
      drwxr-xr-x. 3 root root   18 11月  6 18:50 test
      -rw-r--r--. 1 root root  528 11月 11 15:55 test.txt
      -rw-r--r--. 1 root root  371 11月  9 10:57 ya1.tar.gz
      [root@localhost ~]#
    2.  ln 原⽂件名 硬链接名 , 仅普通⽂件可以创建硬链接,若原⽂件不存在,硬链接依然有效。
      [root@localhost ~]# ln a12.txt a1.txt
      [root@localhost ~]# cat a1.txt
      I love you
      you love me
      Do you love me?
      Only you
      [root@localhost ~]# cat a12.txt
      I love you
      you love me
      Do you love me?
      Only you
      [root@localhost ~]# vim a12.txt
      [root@localhost ~]# cat a12.txt
      I love you
      you love me
      Do you love me?
      [root@localhost ~]# cat a1.txt
      I love you
      you love me
      Do you love me?
      [root@localhost ~]# ll
      总用量 24
      -rw-r--r--. 2 root root   39 11月 14 14:59 a12.txt
      -rw-r--r--. 2 root root   39 11月 14 14:59 a1.txt
      -rw-r--r--. 1 root root  120 11月 14 14:40 aaa.txt
      -rw-------. 1 root root 1463 7月  24 17:44 anaconda-ks.cfg
      lrwxrwxrwx. 1 root root    7 11月 14 14:56 a.txt -> a12.txt
      drwxr-xr-x. 2 root root   53 11月  9 15:01 java
      drwxr-xr-x. 2 root root    6 11月 14 09:13 kgcnews
      drwxrwxr-x. 7 root root   88 11月 14 09:12 qjt1
      drwxr-xr-x. 2 root root    6 11月  4 14:49 qjt2
      -rw-r--r--. 1 root root    0 11月 14 09:14 shell.txt
      drwxr-xr-x. 3 root root   18 11月  6 18:50 test
      -rw-r--r--. 1 root root  528 11月 11 15:55 test.txt
      -rw-r--r--. 1 root root  371 11月  9 10:57 ya1.tar.gz
      [root@localhost ~]#
  4. 定时服务 crond
    1.  

    2. systemctl start|stop|restart|status crond 启动,停⽌ 重启,查看定时服务的状态 。

    3. crontab -e 编辑任务 -l 列表显⽰任务 -r删除所有任务。

    4. 在编辑⽂件中的每⾏格式 * * * * * 任务, 每⾏代表⼀个任务 。
    5. *从左往右依次是: 分时⽇⽉周。
    6. 举例: */1 * * * * date >>/root/mytime.txt
      [root@hadoop101 ~]# crontab -e
      在⽂件中添加 */1 * * * * date >>/root/mytime.txt
      [root@hadoop101 ~]# systemctl start crond
      [root@hadoop101 ~]# cat mytime.txt
      2023年 11⽉ 14⽇ 星期⼆ 00:50:01 CST
      2023年 11⽉ 14⽇ 星期⼆ 00:51:01 CST
      [root@hadoop101 ~]# crontab -l
      */1 * * * * date >>/root/mytime.txt
  5. 历史命令 history 查看曾经执⾏过的近1000条命令及命令id 。
    1. 调⽤历史使⽤ !命令id
      [root@hadoop101 ~]# history
      
      [root@hadoop101 ~]# !557
      date
      2023年 11⽉ 14⽇ 星期⼆ 01:22:25 CST
    2. 调⽤历史命令: 使⽤上下箭头按键 
  6. shell 脚本
    1. shell 脚本就是⼀个集成了多个Linux命令的⽂本⽂件 。
    2. 编辑⼀个shell脚本 vim xxx.sh , 建议以.sh结尾, 注意开头 #!/bin/bash 注释说明运⾏环境。
      1. [root@hadoop101 ~]# vim test.sh
        [root@hadoop101 ~]# cat test.sh
        echo 'Hello shell'
        [root@hadoop101 ~]#
    3. 运⾏shell脚本
      1. bash test.sh 建议使⽤此⽅法
        [root@hadoop101 ~]# bash test.sh
        Hello shell
      2. source test.sh
        [root@hadoop101 ~]# source test.sh
        Hello shell
      3. . test.sh
        [root@hadoop101 ~]# . test.sh
        Hello shell
      4. ./test.sh 
        [root@hadoop101 ~]# ./test.sh
        -bash: ./test.sh: 权限不够
        [root@hadoop101 ~]# ll
        总⽤量 4
        -rw-r--r--. 1 root root 19 11⽉ 14 01:28 test.sh
        [root@hadoop101 ~]# chmod u+x test.sh
        [root@hadoop101 ~]# ll
        总⽤量 4
        -rwxr--r--. 1 root root 19 11⽉ 14 01:28 test.sh
        [root@hadoop101 ~]# ./test.sh
        Hello shell
        [root@hadoop101 ~]#

         

posted @ 2023-11-14 18:54  韩世康  阅读(3)  评论(0编辑  收藏  举报