1. cut

cut 的工作就是“剪”,就是在文件中剪切数据。
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出

1.1 基本用法:

cut [ 选项参数 ] filename

1.2 选项参数说明:

-f: 列号,提取第几列
-d: 分隔符,按照指定分隔符分割列,默认分隔符是制表符

1.3 案例实操

(1)数据准备

  1. [root@localhost ~]# touch cut.txt
  2. [root@localhost ~]# vim cut.txt
  3. shell linux
  4. abes mzmz
  5. I I
  6. love love
  7. you you

(2)切割cut.txt 第一列

  1. [root@localhost ~]# cut -d " " -f 1 cut.txt
  2. shell
  3. abes
  4. I
  5. love
  6. you

(3)切割cut.txt 第二、三列

  1. [root@localhost ~]# cut -d " " -f 2,3 cut.txt
  2. linux
  3. mzmz
  4. I
  5. love
  6. you

(4)在 cut.txt文件中切割出abes

  1. [root@localhost ~]# cat cut.txt | grep "abes"
  2. abes mzmz
  3. [root@localhost ~]# cat cut.txt | grep "abes" | cut -d " " -f 1
  4. abes

(5)选取系统PATH变量值,第二个“:”后的所有PATH

  1. [root@localhost ~]# echo $PATH
  2. /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/mongodb/bin:/root/bin
  3. [root@localhost ~]# echo $PATH | cut -d : -f 3-
  4. /usr/sbin:/usr/bin:/usr/local/mongodb/bin:/root/bin

(6)找出 ip addr 后的 ip 地址

  1. 先ip addr查看

    1. [root@localhost ~]# ip addr
    2. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    3. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    4. inet 127.0.0.1/8 scope host lo
    5. valid_lft forever preferred_lft forever
    6. inet6 ::1/128 scope host
    7. valid_lft forever preferred_lft forever
    8. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    9. link/ether 00:0c:29:1c:53:2a brd ff:ff:ff:ff:ff:ff
    10. inet 192.168.19.10/24 brd 192.168.19.255 scope global noprefixroute ens33
    11. valid_lft forever preferred_lft forever
    12. inet6 fe80::30b4:e70a:3677:76d2/64 scope link noprefixroute
    13. valid_lft forever preferred_lft forever
  2. ip 地址在 ens33: 里面, 取出ens33所在的行,“grep ens33” ```shell [root@localhost ~]# ip addr | grep “ens33” 2: ens33: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 inet 192.168.19.10/24 brd 192.168.19.255 scope global noprefixroute ens33

  1. 3. 取出以inet为首的第二行,以“ grep inet”实现
  2. ```shell
  3. [root@localhost ~]# ip addr | grep "ens33" | grep "inet"
  4. inet 192.168.19.10/24 brd 192.168.19.255 scope global noprefixroute ens33
  1. 用 cut 命令以空格为分割符,取出第6列
    1. [root@localhost ~]# ip addr | grep "ens33" | grep "inet" | cut -d " " -f 6
    2. 192.168.19.10/24

    2. sed

    介绍:sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

    2.1 基本用法

    sed [ 选项参数 ] ‘command’filename

    2.2 选项参数说明

    | 选项参数 | 功能描述 | | —- | —- | | -e | 直接在指令列模式上进行sed的动作编辑。 |

2.3 命令功能描述

命令 功能描述
a 新增,a的后面可以接字符串,在下一行出现
d 删除
s 查找并替换

2.4 案例实操

(1)数据准备

  1. [root@localhost ~]# touch sed.txt
  2. [root@localhost ~]# vim sed.txt
  3. xiao mei
  4. xiao hua
  5. wo wo
  6. lai lai
  7. le le

(2)将“mei nv”这个单词插入到sed.txt第二行下,打印。

  1. [root@localhost ~]# sed "2a mei nv" sed.txt
  2. xiao mei
  3. xiao hua
  4. mei nv
  5. wo wo
  6. lai lai
  7. le le
  8. [root@localhost ~]# cat sed.txt
  9. xiao mei
  10. xiao hua
  11. wo wo
  12. lai lai
  13. le le

注意:原文件并没有改变
(3)删除sed.txt文件所有包含wo的行

  1. [root@localhost ~]# sed "/wo/d" sed.txt
  2. xiao mei
  3. xiao hua
  4. lai lai
  5. le le
  6. [root@localhost ~]# cat sed.txt
  7. xiao mei
  8. xiao hua
  9. wo wo
  10. lai lai
  11. le le

(4)将sed.txt文件中wo替换为ni

  1. [root@localhost ~]# sed "s/wo/ni/g" sed.txt
  2. xiao mei
  3. xiao hua
  4. ni ni
  5. lai lai
  6. le le

注意:‘g’表示global,全部替换
(5)将sed.txt文件中的第二行删除并将wo替换为ni

  1. [root@localhost ~]# sed -e "2d" -e "s/wo/ni/g" sed.txt
  2. xiao mei
  3. ni ni
  4. lai lai
  5. le le

3. awk

一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。

3.1 基本方法

awk [ 选项参数 ] ‘pattern { action1 } pattern { action2 } … ‘ filename
patthern: 表示AWK在数据中查找的内容,就是匹配模式
action: 在找到匹配内容时所执行的一系列命令

3.2 选项参数说明

选项参数 功能
-F 指定输入文件分隔符
-v 赋值一个用户定义变量

3.3 案例实操

(1)数据准备

  1. [root@localhost ~]# cp /etc/passwd ./

(2)搜索passwd文件以root关键字开头的所有行,并输出该行的第7列。

  1. [root@localhost ~]# awk -F: '/^root/{print $7}' passwd
  2. /bin/bash

(3)搜索passwd文件以root关键字开头的所有行,并输出该行的第1列和第7列,中间以“,”号分割。

  1. [root@localhost ~]# awk -F: '/^root/{print $1","$7}' passwd
  2. root,/bin/bash

注意:只有匹配了pattern的行才会执行action

(4)只显示 /etc/passwd 的第一列和第七列,以逗号分割,且在所有行前面添加列名user,shell在最后一行添加”abes,/binzuishuai”。
提示:BEGIN 在所有数据读取行之前执行;END 在所有数据执行之后执行。

  1. [root@localhost ~]# awk -F: 'BEGIN{print "user,shell"} {print $1","$7} END{print "abes,/bin/zuishuai"}' passwd
  2. user,shell
  3. root,/bin/bash
  4. bin,/sbin/nologin
  5. daemon,/sbin/nologin
  6. adm,/sbin/nologin
  7. lp,/sbin/nologin
  8. sync,/bin/sync
  9. ...
  10. abes,/bin/zuishuai

(5)将passwd文件中的用户id增加数值1并输出

  1. [root@localhost ~]# awk -v i=1 -F: 'BEGIN{print "user,uid,uid+1"} {print $1","$3","$3+1}' passwd
  2. user,uid,uid+1
  3. root,0,1
  4. bin,1,2
  5. daemon,2,3
  6. ...
  7. sshd,74,75
  8. postfix,89,90
  9. chrony,997,998
  10. ntp,38,39
  11. tcpdump,72,73

4. sort

sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。

4.1 基本语法

sort(选项)(参数) | 选项 | 说明 | | —- | —- | | -n | 依照数值的大小排名 | | -r | 以相反的顺序排序 | | -t | 设置排序时所用的分隔符 | | -k | 指定需要排序的列 |

参数:指定待排序的文件列表

4.2 案例实操

(1)数据准备

  1. [root@localhost ~]# touch sort.txt
  2. [root@localhost ~]# vim sort.txt
  3. bb:10:6.6
  4. bd:20:5.5
  5. xx:30:0.9
  6. oo:50:8.1
  7. ss:40:9.6

(2)sort将文件/文本的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

  1. [root@localhost ~]# sort sort.txt
  2. bb:10:6.6
  3. bd:20:5.5
  4. oo:50:8.1
  5. ss:40:9.6
  6. xx:30:0.9

(3)按照“:”分割后的第二列升序排序。

  1. [root@localhost ~]# sort -t : -nk 2 sort.txt
  2. bb:10:6.6
  3. bd:20:5.5
  4. xx:30:0.9
  5. ss:40:9.6
  6. oo:50:8.1

(4)按照“:”分割后的第三列倒序排序。

  1. [root@localhost ~]# sort -t : -nrk 3 sort.txt
  2. ss:40:9.6
  3. oo:50:8.1
  4. bb:10:6.6
  5. bd:20:5.5
  6. xx:30:0.9