Linux 命令集合

目录

基础概念

1 软连接和硬链接

1.1 基础概念


#01 硬链接
硬链接(Hard links):可以这样理解,硬链接就是某个文件实体的别名。硬链接甚至可以使多个文件名拥有相同的inode,你可以为单个文件创建多个硬链接。在不同的文件系统中,inode可能产生冲突,所以不能为不同文件系统或分区的目录和文件创建硬链接。 #02 软连接
软链接(Soft links, Symbolic links):就像在Windows系统中创建快捷方式一样,创建软链接实际上相当于创建一个指向某个文件实体指针变量,可以为不同文件系统或分区的目录创建软链接。

1.2 如何创建软链接

语法格式

ln -s FILE_NAME LINK_NAME

​ -s 创建软连接 给谁创建 -目录或者文件 创建后的软链接名称

##Linux 原生态软连接
[root@master01 ~]# ll /
总用量 20
lrwxrwxrwx. 1 root root 7 7月 22 20:57 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 7月 22 21:00 boot
drwxrwxrwx 4 root root 27 7月 22 23:34 data
drwxr-xr-x 19 root root 3120 7月 22 22:43 dev
drwxr-xr-x. 80 root root 8192 7月 23 20:13 etc
drwxr-xr-x. 2 root root 6 7月 23 21:15 home
lrwxrwxrwx. 1 root root 7 7月 22 20:57 lib -> usr/lib ##软连接
lrwxrwxrwx. 1 root root 9 7月 22 20:57 lib64 -> usr/lib64 ##软连接
drwxr-xr-x. 2 root root 6 4月 11 2018 media
drwxr-xr-x. 2 root root 6 4月 11 2018 mnt
drwxr-xr-x. 5 root root 199 7月 23 21:48 opt
dr-xr-xr-x 147 root root 0 7月 22 22:43 proc
dr-xr-x---. 3 root root 176 7月 23 21:16 root
drwxr-xr-x 27 root root 840 7月 23 21:04 run
lrwxrwxrwx. 1 root root 8 7月 22 20:57 sbin -> usr/sbin #软连接
drwxr-xr-x. 2 root root 6 4月 11 2018 srv
dr-xr-xr-x 13 root root 0 7月 23 21:54 sys
drwxrwxrwt. 12 root root 4096 7月 23 22:00 tmp
drwxr-xr-x. 13 root root 155 7月 22 20:57 usr
drwxr-xr-x. 20 root root 278 7月 22 21:59 var 解释下:
lrwxrwxrwx l 代表软连接 #01 创建软连接
[root@master01 opt]# ln -s html-v2 html 解释下:
ln -s 给html-v2 创建软连接 名称叫 html

零.正则

  • 基础正则
  • 扩展正则

含义:帮助人门处理有规律的内容

01 区别

基础正则(bre basic ) 扩展正则(ere 121 extended )
区别1:符号不同 ^ $ . * [] [^] + | () {} ?
区别2: 支持的命令不同 grep/sed/awk/高级语言 egrep(grep -E) /sed -r /awk/高级语言

02 通配符

#01 含义
* 匹配所有
{} 生成序列
? 匹配任何一个字符 #02 匹配有规律的 {}
1) 无规律的
[root@aliyun day08]# echo {a,z,1,4,6}
a z 1 4 6 2)有规律的
[root@aliyun day08]# echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z 3) 可以添加前后内容
[root@aliyun day08]# echo q{a..z}
qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qx qy qz

03 基础正则

含义 应用场景
^ 以...开头的行
$ 以...结尾的行
^$ 空行(没有任何字符) 排除配置文件中的空行或带注释的行
. 任意一个字符
* 前一个字符出现零次或者零次以上
.* 所有 任何字符 匹配所有 ^.*zhangyuzhou
[] [abc] 相当于是1个字符 匹配a或者b或者c 一次匹配一个字符 与扩展正则+一起使用
[^] [^abc] 相当于是1个字符 不匹配a或者b或者c 排除 与扩展正则+一起使用
  • 空行 ^$
#01 grep 排除空行
[root@aliyun test]# egrep -v '^$' 1.txt
I am zhangyuzhou teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://zhangyuzhou.blog.51cto.com
our size is http://blog.zhangyuzhouedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but zhangyuzhou! #02 sed
[root@aliyun test]# sed -r -n '/^$/!p' 1.txt
I am zhangyuzhou teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://zhangyuzhou.blog.51cto.com
our size is http://blog.zhangyuzhouedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but zhangyuzhou! #03 排除 awk
[root@aliyun test]# awk '!/^($|#)/' /etc/ssh/sshd_config
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
AuthorizedKeysFile .ssh/authorized_keys
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials no
UsePAM yes

    # 含义
    . 任意一个字符
    * 前一个字符连续出现零次或者零次以上 1) * 详解
    连续出现
    1
    1111111
    11111111111 #01 案例
    [root@aliyun test]# egrep -n -o '0*' 1.txt
    7:000
    9:00000 解释下:匹配0 连续多个0
    • .*

    # .* 匹配所有 连续出现 * + {} ?
    # 正则表达式的贪婪行 (增加条件 限制) # 匹配 以^.*root:x 开头的行
    [root@m01 files]# egrep -o '^.*root:x' /etc/passwd
    root:x # 案例1) 匹配以m开头并且 以8结尾的行
    [root@m01 files]# egrep '^m.*8$' zhangyuzhou.txt
    my qq is 49000448 #匹配 zhangyuzhou.txt中 以字母m开头并且以m空格即为的行
    [root@m01 /server/files]# grep '^m.*m $' zhangyuzhou.txt
    • [] 一个整体 每次匹配一个
    #匹配数字
    [0-9]
    # 匹配字母
    [a-z]
    [A-Z]
    [a-zA-Z]
    [a-Z] # 每次只匹配一个
    [root@m01 files]# egrep -o '[abc]' zhangyuzhou.txt
    a
    b
    a
    c # 匹配两个
    [root@m01 files]# egrep -o '[abc][eml]' zhangyuzhou.txt
    am
    al
    al
    bl
    bl # 案例2) 匹配m和o开头 并且 !结尾的行
    [root@m01 files]# egrep -o '^[om].*[ .!]$' zhangyuzhou.txt # 案例3) 只显示文件中大小写字母
    [root@m01 files]# egrep -o '[a-Z]+' zhangyuzhou.txt # 案例4)显示以.结尾的行
    [root@m01 files]# egrep '\.$' zhangyuzhou.txt
    I teach linux.
    not 4900000448.
    • [^] [^abc] 一个整体 排除a b c
    ## 排除 [^括号内容]
    [root@m01 files]# grep '[^abc]' zhangyuzhou.txt 1)进阶案例
    [root@m01 files]# egrep '^[0-9a-Z]*' /etc/passwd
    egrep '^[0-9a-Z]+' /etc/passwd 找出字母和数字开头并且结束的内容 2) [^] 写法
    [root@m01 files]# egrep '^[^:]*' /etc/passwd [^:] 排除: ^ 以除了:冒号开头的连续的所有内容
    找出来除了冒号开头和冒号以外的 所有内容
    • 制表符号

    # 特殊符号
    \n 回车键
    \t tab键
    \b 退格键 [root@m01 files]# echo -e '\nolaboy' olaboy
    [root@m01 files]# echo -e 'dd\bolaboy'
    dolaboy
    [root@m01 files]# echo -e 'qwe\bolaboy'
    qwolaboy

    04 扩展正则

    符号 含义
    | 或者
    + 前一个字符连续出现1次或者1次以上
    {} 固定/范围 连续出现
    () 多含义
    () 整体
    () sed 反向引用 后向引用
    ? 前一个字符连续出现0次或者1次 有或者没有
    • | 或者
    #01 或者
    案例1) 匹配zhangyuzhou或者m的行
    [root@aliyun test]# egrep 'zhang|m' 1.txt
    I am zhangyuzhou teacher!
    I like badminton ball ,billiard ball and chinese chess!
    my blog is http://zhangyuzhou.blog.51cto.com #02 匹配 oldboy 或者 oldbey
    [root@aliyun test]# egrep 'oldb(o|e)y' 1.txt
    my god ,i am not oldbey,but zhangyuzhou!
    my god ,i am not oldboy,but zhangyuzhou! #03 写法2
    [root@aliyun test]# grep 'oldb[oe]y' 1.txt
    my god ,i am not oldbey,but zhangyuzhou!
    my god ,i am not oldboy,but zhangyuzhou! ## 注意 [] 每次匹配一个字符 [abc] a b c #最佳推荐
    单个字符 使用 [abc] [0-9] [a-z]
    多个字符使用 zhang|yu|zhou|。。
    • + 前一个字符连续出现1次或者1次以上
    ##含义 前一个字符连续出现1次或者1次以上
    
    # 统计单词出现的次数
    root@m01 files]# egrep -o '[a-Z]+' zhangyuzhou.txt | sort -nr | uniq -c # 统计字母出现的次数
    egrep -o '[a-Z]' zhangyuzhou.txt | sort -nr | uniq -c
    • { } a{n,m} 前一个字符a连续出现至少n次,最多m次

    # 语法格式
    a{n,m} 前一个字符a 连续出现最少n次 最多m次 a{n} 前一个字符a 连续出现n次 a{n,} 前一个字符a 连续出现至少n次 #基本不用 a{,m} 前一个字符a 连续出现最多m次 #基本不用 案例1)
    [root@m01 files]# egrep '0{1,5}' zhangyuzhou.txt
    my qq is 49000448
    not 4900000448.
    [root@m01 files]# egrep -o '0{1,5}' zhangyuzhou.txt
    000
    00000 [root@m01 files]# egrep '0{2,3}' zhangyuzhou.txt
    my qq is 49000448
    not 4900000448.
    [root@m01 files]# egrep -o '0{2,3}' zhangyuzhou.txt
    000
    000
    00 [root@m01 files]# egrep -o '0{3,4}' zhangyuzhou.txt
    000
    0000 3) 案例 取出正确的身份证号
    id.txt
    金 211324198705244720
    万 500224197105168312
    任 1231231231zhangyuzhou
    任 3zhangyuzhou
    任 lidao97303136098
    任 alex2197303136098
    任 350182197303oldgir
    吕 211282199209113038
    孔 150000198309176071
    邹 371001197412221284
    贺 130185200011215926
    杜 362522198711278101
    向 14052219961008852X
    取出文件中正确的身份证号码的行 1) 开始书写
    [root@m01 files]# egrep '[0-Z]{18}' shen.txt
    [root@m01 files]# egrep '[0-Z]{18,18}' shen.txt
    金 211324198705244720
    万 500224197105168312
    任 350182197303oldgir
    吕 211282199209113038
    孔 150000198309176071
    邹 371001197412221284
    贺 130185200011215926
    杜 362522198711278101
    向 14052219961008852X [root@m01 files]# egrep '[0-9]{17}[0-9X]' shen.txt
    金 211324198705244720
    万 500224197105168312
    吕 211282199209113038
    孔 150000198309176071
    邹 371001197412221284
    贺 130185200011215926
    杜 362522198711278101
    向 14052219961008852X 解释下:匹配前17位连续为数字 最后一位是数字和字母 [root@m01 files]# egrep '[0-9X]{18}' shen.txt
    金 211324198705244720
    万 500224197105168312
    吕 211282199209113038
    孔 150000198309176071
    邹 371001197412221284
    贺 130185200011215926
    杜 362522198711278101
    向 14052219961008852X
    • ( ) 后向引用
    # 案例 给数字加大于和小于号
    [root@ECs conf.d]# echo 123456 | sed -r 's#(.*)#\1#g'
    123456 [root@ECs conf.d]# echo 123456 | sed -r 's#(.*)#<\1>#g'
    <123456> 给每个数字加括号
    [root@ECs conf.d]# echo 123456 | sed -r 's#(.)#<\1>#g'
    <1><2><3><4><5><6> [root@ECs conf.d]# echo {1..10} | sed -r 's#([0-9]+)#<\1>#g'
    <1> <2> <3> <4> <5> <6> <7> <8> <9> <10>
    • ? 前一个字符出现了0次或者1次
    cat<<EOF>>ta.txt
    joooop
    jooop
    joop
    jop
    jp
    EOF [root@ECs conf.d]# cat ta.txt
    joooop
    jooop
    joop
    jop
    jp #01 取出jp和jop
    方法1
    [root@ECs conf.d]# egrep 'jo?p' ta.txt
    jop
    jp

    一 awk 取列

    1.1 基本用法

    称呼
    记录 record
    字段 域 field
    替换 gsub(/找谁/,"替换成什么",替换那一列 不写默认全部)
    -v 修改或者添加 awk 默认变量
    -vOFS= 指定 awk 默认字段分隔符 (内置)
    printf 格式化输出
    1. 取行
    RS -vRS= 修改默认行与行之间的 标记 间隔符 记录行分隔符
    ORS 输出当前记录分隔符
    NR 记录号 行号 内置变量
    2. 取列
    -F (FS) 指定 字段分割符 默认是空格
    NF 每一行有多少列 $NF 变量 内容
    -v 修改或者添加 awk 默认变量
    -vOFS= 指定 awk 默认字段分隔符 (内置)
    -f 指定awk 脚本

    1.2 取列案例

    #01 找出系统中所有的用户?
    [root@aliyun day04]# awk -F':' '{print $1}' test
    root
    bin
    daemon
    adm
    lp
    sync
    shutdown
    halt
    mail
    operator
    games
    ftp
    nobody
    systemd-network
    dbus
    polkitd
    postfix
    chrony
    sshd
    tcpdump
    nscd
    saslauth #02 打印第一列和最后两列
    awk -F':' '{print $1,$(NF-1),$NF}' test | column -t 解释下:
    $(NF-1) 倒数第二行
    $NF 倒数第一行

    1.3 取行案例 取反

    #01 取出前三行
    [root@aliyun day04]# awk 'NR<=3' test
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin #02 取出第8行到第12行
    [root@aliyun day04]# awk 'NR >=8 && NR <=12 {print NR,$0}' test
    8 halt:x:7:0:halt:/sbin:/sbin/halt
    9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10 operator:x:11:0:operator:/root:/sbin/nologin
    11 games:x:12:100:games:/usr/games:/sbin/nologin
    12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin #03 排除空行 并统计
    [root@station ~]# awk '$0 !~/^$/ {i++} END { print "总计行数: " i }' /etc/services
    总计行数: 11159 解释下:
    $0 !~/^$/ $0 代表全部
    ! 代表取反
    排除空行 #04 每隔5行打印一个空行
    [root@aliyun ~]# awk '{if (NR%5==0) {print " "};print NR,$0 }' /etc/passwd
    1 root:x:0:0:root:/root:/bin/bash
    2 bin:x:1:1:bin:/bin:/sbin/nologin
    3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
    4 adm:x:3:4:adm:/var/adm:/sbin/nologin 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    6 sync:x:5:0:sync:/sbin:/bin/sync
    7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    8 halt:x:7:0:halt:/sbin:/sbin/halt
    9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10 operator:x:11:0:operator:/root:/sbin/nologin
    11 games:x:12:100:games:/usr/games:/sbin/nologin
    12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    13 nobody:x:99:99:Nobody:/:/sbin/nologin
    14 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin 解释下:
    NR%5==0 能被5整除的行 代表处理5行 #04 找出/etc/passwd 用户ID和用户组ID 不一样的 所有用户
    [root@aliyun ~]# awk -F':' ' $3!=$4 {print}' /etc/passwd
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 解释下:
    $3!=$4 第三行 不等于第四行

    1.4 取行取列结合案例

    #01 取前五行的 第一列和最后一列 并显示行号
    [root@aliyun day04]# awk -F ':' 'NR<=5 {print NR,$1,$NF}' test | column -t
    1 root /bin/bash
    2 bin /sbin/nologin
    3 daemon /sbin/nologin
    4 adm /sbin/nologin
    5 lp /sbin/nologin

    1.5 取偶数和奇数

    #01 取出前20行 所有的偶数行
    [root@aliyun day04]# awk 'NR%2==0 && NR <=20 {print NR,$0}' test
    2 bin:x:1:1:bin:/bin:/sbin/nologin
    4 adm:x:3:4:adm:/var/adm:/sbin/nologin
    6 sync:x:5:0:sync:/sbin:/bin/sync
    8 halt:x:7:0:halt:/sbin:/sbin/halt
    10 operator:x:11:0:operator:/root:/sbin/nologin
    12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    14 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    16 polkitd:x:999:997:User for polkitd:/:/sbin/nologin
    18 chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    20 tcpdump:x:72:72::/:/sbin/nologin #02 取出前20行 所有的奇数行
    [root@aliyun day04]# awk 'NR%2==1 && NR <=20 {print NR,$0}' test
    1 root:x:0:0:root:/root:/bin/bash
    3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
    5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    11 games:x:12:100:games:/usr/games:/sbin/nologin
    13 nobody:x:99:99:Nobody:/:/sbin/nologin
    15 dbus:x:81:81:System message bus:/:/sbin/nologin
    17 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    19 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin 解释下:
    && 代表并且 需要条件全部成立
    NR%2==1 取出奇数行
    NR%2==0 取出偶数行

    1.6 过滤 取反排除

    • 语法解析
    #01  找出最后一列包含 sbin
    awk -F ':' '$NF ~/sbin/ {print $NF}' test 解释下:
    -F 指定分隔符 ':'
    $NF ~/sbin/ ' 从哪里找 ' ' ~ 模糊匹配 包含' ' /找什么/ '
    {print $NF} 打印最后一列 指定分隔符为 ':' 寻找最后一列 包含 sbin 的所有行。并打印最后一列 #02 排除空行 并统计行号
    [root@station ~]# awk '$0 !~/^$/ {i++} END { print "总计行数: " i }' /etc/services
    总计行数: 11159 解释下:
    $0 !~/^$/ $0代表全部 !代表取反

    1.7 取IP地址 多个分隔符

    #01 取出eth0 IP地址
    [root@aliyun ~]# ip a | awk -F '[ /]+' '/eth0$/ {print $3}'
    172.26.138.198 解释下:
    -F '[ /]+' 指定多个分隔符:[ /] 分隔符是 空格和 /
    这里的 + 代表 连续匹配 匹配多次为一个分隔符
    /eth0$/ 过滤以 eth0 结尾的行 $代表 以什么什么结尾

    1.8 取出剩余内存

    #01 取出可用内存 并且以人类可读对方式显示
    1)查看可用内存
    [root@aliyun ~]# free
    total used free shared buff/cache available
    Mem: 1881828 956024 71312 124864 854492 613464
    Swap: 0 0 0 2)取出内存 并换算
    [root@aliyun ~]# free | awk '/^Mem/ {print $NF/1024 "MB"}'
    598.441MB 解释下:
    print $NF/1024 "MB" 取出最后一列 并除以 1024 得到单位 MB
    除以:/
    乘以:*
    加法:+
    减法:- free 查看系统内存信息
    -h 以人类可读方式显示

    1.9 取出磁盘剩余容量

    #01 取出磁盘可用容量 已经使用百分比
    [root@aliyun ~]# df | awk '/\/$/ {print "可用对磁盘容量是:"$(NF-2)/(1024*1024) " GB" ,$(NF-1)}'
    可用对磁盘容量是:18.2567 GB 52% 解释下:
    /\/$/ 过滤以 / 结尾的行
    \ 转义字符;去掉命令原有的属性;回归命令本身; df
    显示文件系统使用率

    2.0 变量的使用

    #案例1
    [root@aliyun awk]# cat 01.txt
    waiwai 90 98 98 96 96 92
    xiaoyu 70 77 85 83 70 89
    gege 85 92 78 94 88 91
    xingxing 89 90 85 94 90 95
    bingbing 84 88 80 92 84 82
    dandan 64 80 60 60 61 62 #01 请计算同学们各科的平均成绩
    [root@aliyun awk]# awk '{ x=$2+$3+$4+$5+$6+$7;y=x/6;print $1,y}' 01.txt
    waiwai 95
    xiaoyu 79
    gege 88
    xingxing 90.5
    bingbing 85
    dandan 64.5 解释:
    x=$2+$3+$4+$5+$6+$7;y=x/6;print $1,y
    x 设置的变量 = 总成绩
    y 设置的变量 = 平均值
    ; 分号 ,命令可以同时执行 #02 以循环的方式 取出平均分数
    [root@aliyun 01-awk]# awk '{sum=0;for (i=2;i<=NF;i++) sum=sum+$i ;y=sum/NF;print $1,"总成绩: "sum,"平均分: "y}' 01.txt | column -t
    waiwai 总成绩: 570 平均分: 81.4286
    xiaoyu 总成绩: 474 平均分: 67.7143
    gege 总成绩: 528 平均分: 75.4286
    xingxing 总成绩: 543 平均分: 77.5714
    bingbing 总成绩: 510 平均分: 72.8571
    dandan 总成绩: 387 平均分: 55.2857 解释下:
    sum=0 因为每次循环的成绩累加
    i=2;i<=NF;i++ i 的默认值是2 从第二列开始 循环到NF最后一列 每次i++ 自增
    sum=sum+$i sum 等于$i相加 ; $i 变量的值 就是每一列对应的值

    2.1 BEGIN 模式动作

    BEGIN {} 含义 BEGIN {} 里面的内容 会在awk读取文件之前执行
    应用场景 1. 进行统计或者计算
    2. 进行测试 awk 测试 gsub
    3. 用来显示标题
    #01 计算
    [root@aliyun ~]# awk 'BEGIN {print 100*12}'
    1200
    [root@aliyun ~]# awk 'BEGIN {print 100*12+4}'
    1204
    [root@aliyun ~]# awk 'BEGIN {print 100*(12+4)}'
    1600 #02 打印标题
    [root@aliyun day05]# awk 'BEGIN{print "姓名","电话","微信"}'
    姓名 电话 微信 #02 案例
    cat <<EOT >/opt/day05/29.txt
    waiwai 90 98 98 96 96 92 100
    xiaoyu 70 77 85 83 70 89 60
    gege 85 92 78 94 88 91 80
    xingxing 89 90 85 94 90 95 93
    bingbing 84 88 80 92 84 82 94
    dandan 64 80 60 60 61 62 96
    zhangbingbing 94 100 92 98 50 60 94
    EOT 1)计算总分 平均分 并打印标题
    [root@aliyun ~]# awk 'BEGIN{print "姓名","总成绩","平均分"} {x=$2+$3+$4+$5+$6+$7+$8;y=x/8;print $1,x,y}' /opt/day05/29.txt | column -t
    姓名 总成绩 平均分
    waiwai 670 83.75
    xiaoyu 534 66.75
    gege 608 76
    xingxing 636 79.5
    bingbing 604 75.5
    dandan 483 60.375
    zhangbingbing 588 73.5 2)每科成绩打印出来,并打印平均分总分和标题
    [root@aliyun day05]# awk 'BEGIN{print "姓名\t" "英语\t" "语文\t" "数学\t" "物理\t" "化学\t" "生物\t" "美术\t" "总分\t" "平均分"} {x=0;for(i=2;i<=NF;i++)x+=$i;y=x/(NF-1) ;print $0,x,y}' /opt/day05/29.txt | column -t
    姓名 英语 语文 数学 物理 化学 生物 美术 总分 平均分
    waiwai 90 98 98 96 96 92 100 670 95.7143
    xiaoyu 70 77 85 83 70 89 60 534 76.2857
    gege 85 92 78 94 88 91 80 608 86.8571
    xingxing 89 90 85 94 90 95 93 636 90.8571
    bingbing 84 88 80 92 84 82 94 604 86.2857
    dandan 64 80 60 60 61 62 96 483 69
    zhangbingbing 94 100 92 98 50 60 94 588 84 解释下:
    BEGIN{print "姓名\t" "英语\t" "语文\t" "数学\t" "物理\t" "化学\t" "生物\t" "美术\t" "总分\t" "平均分"} 打印标题
    {x=0; 给个初始值是0
    for(i=2;i<=NF;i++)x+=$i 循环相加 从i 第二列开始到最后一列结束 x 是相加结果
    ;y=x/(NF-1) y 计算平均分 由于第一列是姓名,需要去掉
    print $0,x,y $0代表所有

    2.2 END 最后

    END {} 含义 END {}
    1. 用来显示计算结果 先进行统计 最后END {} 输出结果
    2. 显示尾部或者结束信息提示
    公式 i++ == i=i+1 统计次数 一共有多少次/个 .....
    j+=$2 === j=j+$2 计算总和 (累加)
    数组 ++ h[$1]++ 分类统计 并显示
    数组+= $???? h[$1]=h[$1]+$10 分类求和
    #01 案例 统计/etc/下 所有文件大小
    [root@aliyun day05]# ll -t `find /etc/ -type f` | awk 'BEGIN{print "文件数量","总大小"} {i++;x=x+$5} END{print i,x/1024/1024"MB"}' | column -t
    文件数量 总大小
    2020 31.7197MB 解释下:
    END{print i,x/1024/1024"MB"} #02 案例3) 统计access.log 总计流程 状态码200的次数和流量 4开头或者5开头的 1) 流量总计
    [root@m01 files]# awk '{sum=sum+$10} END {print sum}' access.log
    2478496663 2)状态码为200的所消耗的流量
    [root@m01 files]# awk '$9==200 {i++ ; sum=sum+$10} END {print "状态码次数: "i "总计流量: "sum}' /var/log/nginx/access.log
    状态码次数: 142666总计流量: 2476750207 3) 状态码为4xx的次数和总流量
    [root@m01 files]# awk '$9~/^4/ {i++ ; sum=sum+$10} END {print "状态码次数: "i "总计流量: "sum}' access.log
    状态码次数: 4623总计流量: 1606833 4) 状态码为5xx的次数和总流量
    [root@m01 files]# awk '$9~/^(4|5)/ {i++ ; sum=sum+$10} END {print "状态码次数: "i "总计流量: "sum}' access.log
    状态码次数: 4630总计流量: 1624526 其它写法
    [root@m01 files]# awk '$9~/^[2345]/ {i++ ; sum+=$10} END {print "状态码次数: "i "总计流量: "sum}' access.log
    状态码次数: 166943总计流量: 2478496663 sum=sum+$10
    简写格式 sum+=$10 #03 写法2
    #01 统计 /var/log/nginx/access.log 状态码200的次数和流量 总流量 4开头 总汇 1)统计所有状态码的 次数和流量
    [root@aliyun ~]# awk 'BEGIN{ print "总次数\t" "总流量\t"} $9 ~/^[0-9]/ {i++;sum=sum+$10} END{print i,sum}' /var/log/nginx/access.log | column -t
    总次数 总流量
    377 3221118 2)统计状态码2开头 的状态码次数和 流量
    [root@aliyun ~]# awk 'BEGIN{ print "2xx\t" "流量\t"} $9 ~/^2/ {i++;sum=sum+$10} END{print i,sum}' /var/log/nginx/access.log | column -t
    2xx 流量
    120 2969594 3)统计状态码3开头 的状态码 次数和流量
    [root@aliyun ~]# awk 'BEGIN{ print "2xx\t" "流量\t"} $9 ~/^3/ {i++;sum=sum+$10} END{print i,sum}' /var/log/nginx/access.log | column -t
    3xx 流量
    27 135 4)统计状态码4开头 的状态码 次数和流量
    [root@aliyun ~]# awk 'BEGIN{ print "2xx\t" "流量\t"} $9 ~/^4/ {i++;sum=sum+$10} END{print i,sum}' /var/log/nginx/access.log | column -t
    4xx 流量
    27 135 4)汇总要求分别打印所有 状态码(2系列,3系列,4系列)次数和流量 并打印标题
    [root@aliyun ~]# awk ' BEGIN {print "状态码\t" "次数\t" "流量\t"} $9 ~ /^[0-9]/ {x++;y=y+$10}; $9 ~ /^2/ {x2++;y2=y2+$10}; $9 ~ /^3/ {x3++;y3=y3+$10} ;$9 ~ /^4/ {x4++;y4=y4+$10} END{print "2xx \t",x2,y2; print "3xx\t",x3,y3;print "4xx\t",x4,y4; print "all\t",x,y}' /var/log/nginx/access.log | column -t
    状态码 次数 流量
    2xx 120 2969594
    3xx 27 135
    4xx 223 251552
    all 380 3221281 提示:使用这个 ; 符号 执行多次命令 [root@aliyun day07]# cat 01-awk
    BEGIN {
    print "状态码\t" "次数\t" "流量\t"
    }
    $9 ~ /^[0-9]/ {
    x++
    y=y+$10} $9 ~ /^2/ {
    x2++
    y2=y2+$10} $9 ~ /^3/ {
    x3++
    y3=y3+$10} $9 ~ /^4/ {
    x4++
    y4=y4+$10} END {
    print "2xx \t",x2,y2
    print "3xx\t",x3,y3
    print "4xx\t",x4,y4
    print "all\t",x,y
    } [root@aliyun day07]# awk -f 01-awk /var/log/nginx/access.log | column -t
    状态码 出现次数 流量
    2xx 36 734747
    3xx 13 65
    4xx 22 6508
    all 71 741320 解释下:脚本转换 把;符号 换成回车
    使用 -f 指定

    2.3 数组

    使用awk数组

    • awk数组赋值
    • awk数组取值
    • awk数组批量取值
    # 语法格式
    q[1]="zhang"
    q 数组名称
    [1] 索引 下标
    "zhang" 内容 #01 给x赋予值 zhangyuzhou zhangbingbing
    [root@aliyun ~]# awk 'BEGIN{x[1]="zhangyuzhou";x[2]="zhangbingbing"; print x[1],x[2] }'
    zhangyuzhou zhangbingbing 解释下:
    x[1]="zhangyuzhou" x数组内 索引1位置 加入值 zhangyuzhou
    x[2]="zhangbingbing" x数组内 索引2位置 加入值 zhangbingbing #02 取出IP出现的次数 和 流量总和
    #分析动作
    需要 ip 流量 ($1 $10)
    ip地址设置为 数组, 流量设置为 下标内容
    结构 [root@aliyun ~]# awk '{x[$1]=x[$1]+$10} END{for (ip in x)print ip,x[ip]}' /var/log/nginx/access.log | head
    91.240.118.187 0
    47.92.71.160 54300
    20.55.53.144 27150
    8.222.203.92 10
    117.187.173.88 27150
    91.224.92.16 10
    87.251.64.11 0
    84.54.51.12 157
    23.234.211.136 0
    45.43.33.218 27150 解释下 待补充: 'BEGIN{x[1]="zhangyuzhou";x[2]="zhangbingbing"; print x[1],x[2] }' for i in x
    第一次循环
    x = 91.240.118.187
    i = x = 91.240.118.187 x[10.0.0.01] 1000 x[10.0.0.01]-->>1000
    x[10.0.0.01] 3344 x[10.0.0.01]-->>4344 #03 取出/etc/password 中每种 shell 出现的次数 (数组方式)
    [root@aliyun ~]# awk -F':' 'BEGIN {print "shell名称\t","次数\t"} $NF ~/^\// {q[$NF]++} END{ for (i in q) print i,q[i] }' /etc/passwd |column -t | sort -n -k2
    shell名称 次数
    /bin/sync 1
    /sbi 1
    /sbin/halt 1
    /sbin/shutdown 1
    /sbin/no 2
    /bin/bash 8
    /sbin/nologin 23 解释下:
    q[$NF]++} shell 每出现一次 保存在数组里
    for (i in q) 循环取出。
    i i=q =$NF
    q[i] q[i] =q[$NF] = 出现的次数 q[$NF]++
    q[/sbin/nologin]+1 1
    q[/bin/sync]+1 1
    q[/sbin/nologin]+1 2
    q[/bin/bash] 1
    q[/sbin/nologin]+1 3
    q[/bin/sync]+1 2 for (
    i in q) 第一次
    i=q = /sbin/nologin 第二次
    i=q = /bin/sync 第三次
    i=q = /bin/bash print i,q[i] q[i] = q[/bin/sync] = 2 #04 找出/opt/day07/13.txt 登入最多的IP
    cat <<EOT >/opt/day07/13.txt
    219.217.49.14
    175.43.4.87
    87.48.98.1
    59.73.38.25
    219.217.50.14
    59.92.48.32
    219.217.49.14
    59.72.38.142
    59.73.38.25
    219.217.49.14
    219.217.50.14
    59.92.48.32
    219.217.49.14
    59.72.38.142
    59.73.38.25
    219.217.49.14
    59.92.48.32
    EOT [root@aliyun ~]# cat /opt/day07/13.txt | awk '{y[$1]++} END {for (i in y) print i,y[i] }' | column -t | sort | sort -k 2 -nr
    219.217.49.14 5
    59.92.48.32 3
    59.73.38.25 3
    59.72.38.142 2
    219.217.50.14 2
    87.48.98.1 1
    175.43.4.87 1 #17 # 腾讯一 shell 试题.
    假设 qq.tel 文件内容:
    12334:13510014336
    12345:12334555666
    12334:12343453453
    12099:13598989899
    12334:12345454545
    12099:12343454544 要求分类如下:
    [12334]
    13510014336
    12343453453
    ...........
    [12099]
    13598989899
    ............ #05 开始写题
    [root@aliyun day08]# awk -F':' '{y[$1]=y[$1]"\n"$2} END{for (i in y) print "["i"]",y[i] }' 17
    [12099]
    13598989899
    12343454544
    [12334]
    13510014336
    12343453453
    12345454545
    [12345]
    12334555666 解释下:
    要求: 把标题一致的内容统一放置
    分析动作
    # 动作
    保存相同后面标题内容 y[$1]=arr[$1]"\n"$2
    # 解释下 数组y[相同索引$1]索引内容 追加 ##18 数据处理题目
    文件:text.txt 格式:
    web01[192.168.2.100]
    httpd ok
    tomcat ok
    sendmail ok
    web02[192.168.2.101]
    httpd ok
    postfix ok
    web03[192.168.2.102]
    mysqld okif ()
    httpd ok
    需要通过 awk 将输出格式变成:
    web01[192.168.2.100]: httpd ok
    web01[192.168.2.100]: tomcat ok
    web01[192.168.2.100]: sendmail ok
    web02[192.168.2.101]: httpd ok
    web02[192.168.2.101]: postfix ok
    web03[192.168.2.102]: mysqld ok
    web03[192.168.2.102]: httpd ok [root@aliyun day08]# awk '{if ('/^web/') {y=$0} else {x=$0 ;print y": "x}}' 18
    web01[192.168.2.100]: httpd ok
    web01[192.168.2.100]: tomcat ok
    web01[192.168.2.100]: sendmail ok
    web02[192.168.2.101]: httpd ok
    web02[192.168.2.101]: postfix ok
    web03[192.168.2.102]: mysqld ok
    web03[192.168.2.102]: httpd ok 解释下:
    {if
    ('/^web/') 判断以 web开头的
    {y=$0} 条件成立则 赋值给 y = web01[192.168.2.100]..web02[192.168.2.101]
    else
    {x=$0 条件不成立 则赋值给 x = httpd ok tomcat ok... print y": "x}}'

    2.4 判断

    # 语法格式
    1)双分支格式
    { if (判断条件) { 如果成立后的动作 } else {否则 怎么样} } END { 执行完后的动作 } 2) 多分支格式
    { if (判断条件) { 如果成立后的动作 } else if (判断条件) {成立的动作} else {否则 怎么样} } END { 执行完后的动作 }
    • 案例

    #01 取出磁盘可用百分比 超过百分之50 打印“磁盘快满了” 否则显示 一切正常
    [root@aliyun ~]# df -h | awk -F'[ %]+' 'NR>1 {if ($5<60) {print "一切正常 磁盘空间目前可用是: ",$5} else {print "磁盘快 满了 请及时处理"} }'
    一切正常 磁盘空间目前可用是: 0
    一切正常 磁盘空间目前可用是: 0
    一切正常 磁盘空间目前可用是: 1
    一切正常 磁盘空间目前可用是: 0
    一切正常 磁盘空间目前可用是: 52
    一切正常 磁盘空间目前可用是: 0 解释:
    {if #判断
    ($5<60) #第五列小于 60的
    {print "一切正常 磁盘空间目前可用是: ",$5} #条件为真 执行的动作
    else #否则 执行的动作
    {print "磁盘快 满了 请及时处理"}
    } #02 取出2xx 3xx 状态码次数和流量 并且显示其它的次数和流量
    [root@aliyun ~]# awk '{if ($9 ~/^2/) {x2++;y2=y2+$10} else if ($9 ~/^3/) {x3++;y3+=$10} else {x4++;y4+=$10} } END{print "2xx",x2,y2;print "3xx",x3,y3;print "all",x4,y4}' /var/log/nginx/access.log、
    2xx 124 3023904
    3xx 30 150
    all 255 255290

    2.5 循环

    # 语法结构
    # awk数组专用 for循环
    for(ip in h)
    print ip,h[ip] #awk 通用for循环 c语言循环
    for(i=1;i<=10;i++)
    print i ##基本语法
    [root@aliyun ~]# awk 'BEGIN {for (i=1;i<=5;i++) print i}'
    1
    2
    3
    4
    5 解释下:
    {for
    (i=1 循环初始值
    i<=5 循环到结束值。当i 小于或者等于5时候 结束循环
    i++) 每循环一次 i 自增1
    print i} 打印i的值 #01 计算 从1加到100
    [root@aliyun ~]# awk 'BEGIN {for (i=1;i<=100;i++) sum=sum+i;print sum}'
    5050 解释下: for (i=1;i<=100;i++) 从1开始循环到100
    sum=sum+i sum等于 变量i的值。相加的和 1+2+3+4....+100 (从1开始循环到100)
    print sum 最后打印出来 sum 结果

    二. sort uniq 排序去重

    2.1 基本用法

    sort	 排序
    -t: 指定字段分隔符
    -k: 指定要对第几列排序
    -n: 以Number的方式排序
    -r: 默认从小到大, -r 从大到小
    -h: 以人类可读的方式排序

    2.2 对于用户id 排序

    #01 排序
    [root@aliyun ~]# cat /etc/passwd | awk -F':' '{print $3,$4}' | sort -k 1 -n
    0 0
    1 1
    2 2
    3 4
    4 7
    5 0
    6 0
    7 0
    8 12
    11 0
    12 100
    14 50
    16 16
    28 28
    32 32
    38 38
    55 55
    59 59

    2.3 取出访问IP top前十

    [root@aliyun nginx]# cat access.log | awk '{print $1}' | sort -nr | uniq  -c | sort -k 1 -nr | head -10
    69 47.92.30.214
    24 47.92.70.66
    24 172.26.138.198
    22 47.92.32.64
    18 47.92.67.105
    15 8.142.104.65
    12 8.142.87.162
    12 47.92.79.86
    12 223.111.175.3
    11 47.92.73.218 解释下:
    uniq -c 去重 并且显示次数
    sort -nr 以数字的方式进行排序

    2.4 取出访问日志 状态码

    #01 取出状态码
    [root@aliyun nginx]# awk '$9 ~/^[0-9]/ {print $9}' access.log | sort -nr | uniq -c | sort -k 1 -nr | head -5
    340 200
    196 404
    62 301
    24 157
    15 400 解释下:
    '$9 ~/^[0-9]/ {print $9}' 过滤第九行 以数字开头'^[0-9]' 并打印第9列

    三. grep 过滤

    3.1 基本用法

    		grep    过滤
    -r 递归查询
    ^ 以什么开头
    $ 以什么结尾
    -v 取反,排除 可以使用 grep -vn '^$' 排除空行显示
    -E 扩展正则; 匹配多个 (或者使用:egrep)
    -n 显示行号
    -i 忽略大小写
    -o 只显示匹配的内容
    -A 向下打印行数
    -B 向上打印行数
    -C 向下和向下打印行数 (例如:-A2 向下打印2行)
    -w 精准过滤
    -l 过滤单个或者多个文件时 只显示文件名称,不显示内容
    -h 过滤单个或者多个文件时 只显示文件内容,不显示名称
    -R 递归过滤,寻找目录及子目录的所有文件内容
    -P 支持perl 语言正则
    -m 按行匹配 例如; m2 只匹配两行
    -c 小写的 显示匹配的行数; 可以在过滤时候排除自己 例如ps -ef | grep -c '[c]rond'
    -q 安静模式,不打印任何标准输出。如果有匹配的内容则立即返回状态值0。

    3.2 简单使用

    #01 过滤包含root的行
    [root@aliyun etc]# grep 'root' /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin #02 过滤 以root开头的行
    [root@aliyun etc]# grep '^root' /etc/passwd
    root:x:0:0:root:/root:/bin/bash #03 过滤 以bash结尾的行
    [root@aliyun etc]# grep -n 'bash$' /etc/passwd
    1:root:x:0:0:root:/root:/bin/bash
    25:zhangyuzhou:x:1000:1002::/home/zhangyuzhou:/bin/bash
    35:zhangbingbing:x:1001:1001::/home/zhangbingbing:/bin/bash
    36:zhang:x:1002:1009::/home/zhang:/bin/bash
    37:zhangbing:x:1003:1003::/home/zhangbing:/bin/bash
    38:zhangbingbing1:x:1004:1010::/home/zhangbingbing1:/bin/bash
    39:zhangbingbing2:x:1005:1011::/home/zhangbingbing2:/bin/bash
    40:zhangbingbing3:x:1006:1006::/home/zhangbingbing3:/bin/bash

    3.3 排除 取反 多个

    #01 排除 bash 和nologin 结尾的所有行 并显示行号 打印出来
    [root@aliyun ~]# grep -E -vn 'bash$|nologin$' /etc/passwd
    6:sync:x:5:0:sync:/sbin:/bin/sync
    7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    8:halt:x:7:0:halt:/sbin:/sbin/halt
    28:rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/no
    29:libstoragemgmt:x:997:995:daemon account for libstora
    30:pcp:x:996:994:Performance Co-Pilot:/var/lib/pcp:/sbi
    31:oprofile:x:16:16:Special user account to be used by gin
    34:nginx:x:994:991:nginx user:/var/cache/nginx:/sbin/no 解释下:
    'bash$|nologin$' | 代表 并且的意思
    -v 排除
    -n 显示行号

    3.4 打印指定行

    #01 打印前十行
    [root@aliyun ~]# grep -n -A9 '^root' /etc/passwd
    1:root:x:0:0:root:/root:/bin/bash
    2-bin:x:1:1:bin:/bin:/sbin/nologin
    3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
    4-adm:x:3:4:adm:/var/adm:/sbin/nologin
    5-lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    6-sync:x:5:0:sync:/sbin:/bin/sync
    7-shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    8-halt:x:7:0:halt:/sbin:/sbin/halt
    9-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10-operator:x:11:0:operator:/root:/sbin/nologin 解释下:
    先找到第一行的关键词 匹配到第一行
    使用 -A 参数 向下打印9行 #02 打印 上下一行
    [root@aliyun ~]# grep -n -C1 '/var/adm' /etc/passwd
    3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
    4:adm:x:3:4:adm:/var/adm:/sbin/nologin
    5-lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin #03 打印下一行 上两行
    [root@aliyun ~]# grep -n -A1 -B2 '/var/adm' /etc/passwd
    2-bin:x:1:1:bin:/bin:/sbin/nologin
    3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
    4:adm:x:3:4:adm:/var/adm:/sbin/nologin
    5-lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

    3.5 排除空行和注释行

    #01 排除空行和注释行
    [root@aliyun ssh]# grep -E -v '^#|^$' sshd_config
    HostKey /etc/ssh/ssh_host_rsa_key
    HostKey /etc/ssh/ssh_host_ecdsa_key
    HostKey /etc/ssh/ssh_host_ed25519_key
    AuthorizedKeysFile .ssh/authorized_keys
    ChallengeResponseAuthentication no
    GSSAPIAuthentication yes 解释下:
    ^# 注释行,以#开头
    ^$ 空行

    3.6 配合正则

    ## 案例
    金 211324198705244720
    万 500224197105168312
    任 1231231231zhangyuzhou
    任 3zhangyuzhou
    任 lidao97303136098
    任 alex2197303136098
    任 350182197303oldgir
    吕 211282199209113038
    孔 150000198309176071
    邹 371001197412221284
    贺 130185200011215926
    杜 362522198711278101
    向 14052219961008852X
    取出文件中正确的身份证号码的行 提示:身份证是 17数字+x 或者 17数字 #01 取出正确身份证
    [root@aliyun day05]# egrep '[0-9]{18}|[0-9]{17}X' 04.txt
    金 211324198705244720
    万 500224197105168312
    吕 211282199209113038
    孔 150000198309176071
    邹 371001197412221284
    贺 130185200011215926
    杜 362522198711278101
    向 14052219961008852X 解释下:
    [0-9]{18}|[0-9]{17}X
    [0-9] 代表数字
    {18} 18位数字 身份证是18位数字或者17位数字+X #02 案例2 取出IP地址
    1) 方式1
    [root@aliyun ~]# ip a s eth0 | egrep -o '[0-9][0-9][0-9].[0-9][0-9].[0-9][0-9][0-9].[0-9][0-9]8'
    172.26.138.198
    2) 方式2
    [root@aliyun ~]# ip a s eth0 | egrep -o '[0-9]{3}.[0-9]{2}.[0-9]{3}.[0-9]{2}8'
    172.26.138.198

    四. sed 替换

    4.1 基本用法

    		sed     替换
    -n: 取消默认输出 用于取行, '2P' (例:[root@localhost ~]# sed -n '2,5p' /etc/passwd,只打印出2-5行的内容
    sed '1~2p'打印出从1开始,每次加2,的所有行行数,取奇数行
    [root@localhost /]# sed -n '/5/Ip' /file 过滤出包含5的行,I,忽略大小写 -r: 扩展正则
    -i: 更改数据
    例:sed 's#/(^.*)(.*)(.*$)#\#g' ''中的字母,command命令 . 代表任意单个字符
    * 多次重复前面字符
    ^ 从首部开始
    $ 尾部
    () 分组
    / 转义符号,回归原有属性,比如:需要在正侧里显示括号,可以使用转义符号
    例如 [root@localhost /]# stat /etc/passwd | sed -n '4p' | sed -r 's#.*\((.*)/-.*#\1#g'
    在正侧里回归括号本身的属性
    \ 调用分组中某个()中的数据
    s: 替换
    g: 全局
    p: 打印
    d: 删除某一行 ( 例: sed '2,5d' ,删除2-5行) # sed -n '$p' /etc/passwd 取最后一行
    '$p' 表示最后一行,'/$1/p' 如果有斜线保护 侧是以什么什么结尾
    & 表示匹配的所有内容 例如 sed 's#.*#&#g' 这里面 & 表示 前面的 .* 数据 nginx -V 2>/dev/stdout| sed -n '/configure/s# #\n#gp' 搜索的正确输入 空格替换回车

    4.2 打印和删除 指定行

    • -n 执行删除操作时候 需要去除该参数
    #01 打印2-5
    [root@aliyun ~]# cat -n /etc/passwd |sed -n '2,5p'
    2 bin:x:1:1:bin:/bin:/sbin/nologin
    3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
    4 adm:x:3:4:adm:/var/adm:/sbin/nologin
    5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 解释下:
    -n 取消默认输出 用于取行
    2,5 第二行到第五行
    p 打印 总汇:打印 2-5行 /etc/passwd #02 取最后一行
    [root@aliyun ~]# cat /etc/passwd -n | sed -n '$p'
    40 zhangbingbing3:x:1006:1006::/home/zhangbingbing3:/bin/bash 解释:$p 代表最后一行 #03 打印单行
    [root@aliyun opt]# cat -n /opt/passwd | sed -n '5p'
    5 daemon:x:2:2:daemon:/sbin:/sbin/nologin #04 删除2-6行
    [root@aliyun opt]# sed -i '2,6d' /opt/passwd 解释下:
    d 删除
    -i 修改文件 #04 打印指定行的 后行
    [root@aliyun opt]# sed -rn '/^zhangyuzhou/,+5p' passwd
    zhangyuzhou:x:1000:1002::/home/zhangyuzhou:/bin/bash
    tss:x:59:59:Account used by the trousers package to in/nologin
    abrt:x:173:173::/etc/abrt:/sbin/nologin
    rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/no
    libstoragemgmt:x:997:995:daemon account for libstora
    pcp:x:996:994:Performance Co-Pilot:/var/lib/pcp:/sbi 解释下:过滤zzhangyuzhou 开头的行 并且向下打印5行 +5p 向下打印5行 #05 打印偶数行和奇数行
    [root@aliyun opt]# seq 10 | sed -n '1~2p'
    1
    3
    5
    7
    9
    [root@aliyun opt]# seq 10 | sed -n '0~2p'
    2
    4
    6
    8
    10 解释下
    0~2p
    从0开始每次加2

    4.3 替换文件内容

    #01 替换root 为zhangbingbing
    [root@aliyun ~]# sed 's#root#zhangbingbing#g' /etc/passwd 解释下:
    s#root#zhangbingbing#g:
    语法解释-- s#找谁#替换谁#g g 代表全局替换 否则只会替换每行的第一个 #02 指定行数
    [root@aliyun ~]# sed -r '3s#448#558#g' /opt/day08/file.txt
    my qq num is 49000448.$ not 4900000558.
    my god ,i am not oldby,but clsn!$
    my god ,i am 000 oldboy,but clsn!$ 解释下:
    3s#448#558#g 3s 代表替换第三行

    4.4 过滤 取反

    注意: sed默认输出显示文件内容 可以使用 -n 取消默认输出
    
    #01 sed 匹配多个
    [root@aliyun opt]# sed -n -r '/^zhangbingbing|bash$/p' /opt/passwd
    root:x:0:0:root:/root:/bin/bash
    root:x:0:0:root:/root:/bin/bash
    root:x:0:0:root:/root:/bin/bash
    zhangyuzhou:x:1000:1002::/home/zhangyuzhou:/bin/bash
    zhangbingbing:x:1001:1001::/home/zhangbingbing:/bin/bash
    zhang:x:1002:1009::/home/zhang:/bin/bash
    zhangbing:x:1003:1003::/home/zhangbing:/bin/bash
    zhangbingbing1:x:1004:1010::/home/zhangbingbing1:/bin/bash
    zhangbingbing2:x:1005:1011::/home/zhangbingbing2:/bin/bash
    zhangbingbing3:x:1006:1006::/home/zhangbingbing3:/bin/bash 解释下:
    /^zhangbingbing|bash$/p 匹配以zhangbingbing开头和 bash结尾的行 全部打印出来
    p 打印 #02 从103开始匹配 到119结束
    [root@m01 files]# sed -n '/103/,/119/p' sed.txt
    103,张宇宙996,COO
    104,yy,CFO
    105,feixue,CIO
    110,lidao,COCO
    119,huiling,CFO 解释下: sed -n '/从那里开始/,/到那里结束/'
    只适用于第一列 且是数字 #03 取反
    [root@aliyun opt]# sed -rn '/^zhang/!p' passwd 解释下:排除 zhang开头的行 显示其它的全部 !p 取反

    4.5 增加内容

    #01 在最后一行增加 zhangbingbing momo
    [root@aliyun day05]# sed -r '$a zhangbingbing momo ' 02.txt
    103,张宇宙996,COO
    104,yy,CFO
    105,feixue,CIO
    110,lidao,COCO
    119,huiling,CFO
    zhangbingbing momo #02 在最后一行增加多行
    [root@aliyun day05]# sed -r '$a zhangbingbing momo\n1\n232 ' 02.txt
    103,张宇宙996,COO
    104,yy,CFO
    105,feixue,CIO
    110,lidao,COCO
    119,huiling,CFO
    zhangbingbing momo
    1
    232 解释下:
    $a 代表最后一行
    \n 换行符

    4.6 后向引用

    #01 替换文件内的所有数字 为 66
    [root@aliyun day05]# sed -r 's#[0-9]#66#g' 01.txt
    <6666><6666><6666>,zhangyuzhou,CEO
    <6666><6666><6666>,zhangya,CTO
    <6666><6666><6666>,<6666><6666><6666>,COO
    <6666><6666><6666>,yy,CFO
    <6666><6666><6666>,feixue,CIO
    <6666><6666><6666>,lidao,COCO
    <6666><6666><6666>,huiling,CFO 解释下:
    's#[0-9]#66#g'
    [0-9] 代表数字
    [a-z] 小写字母
    [A-Z] 大写字母
    [a-Z] 大小写字母
    66 每个数字替换的内容 #02 匹配指定字符 并加 <> 括起来
    [root@aliyun day05]# echo {1..4}{a..e} | sed -r 's#([0-9][a-z])#<\1>#g'
    <1a> <1b> <1c> <1d> <1e> <2a> <2b> <2c> <2d> <2e> <3a> <3b> <3c> <3d> <3e> <4a> <4b> <4c> <4d> <4e> 解释下:
    's#([0-9][a-z])#<\1>#g'
    ([0-9][a-z]) 匹配 数字和字母
    \1 后向引用 #03 取出系统用户和使用的 bash
    [root@aliyun ~]# sed -r 's#(.*):x.*:(.*)#\1,\2#g' /etc/passwd
    oprofile,Special user account to be used by gin
    ntp,/sbin/nologin
    mysql,/sbin/nologin
    nginx,/sbin/no
    zhangbingbing,/bin/bash
    zhang,/bin/bash
    zhangbing,/bin/bash
    zhangbingbing1,/bin/bash
    zhangbingbing2,/bin/bash
    zhangbingbing3,/bin/bash #04 取出 IP地址
    [root@aliyun ~]# ip a s eth0 | sed -rn '3p'
    inet 172.26.138.198/20 brd 172.26.143.255 scope global dynamic eth0
    [root@aliyun ~]# ip a s eth0 | sed -rn '3p' | sed -r 's#.*t (.*)/.*#\1#g'
    172.26.138.198 解释下:
    's#.*t (.*)/.*#\1#g'
    .*t 匹配到t 停止匹配
    /.* 从/ 开始匹配后面的所有 #05 取出文件权限
    [root@aliyun ~]# stat /etc/passwd | sed -n '4p'
    权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
    [root@aliyun ~]# stat /etc/passwd | sed -n '4p' | sed -r 's#.*\((.*)/-.*#\1#g'
    0644 解释下:
    's#.*\((.*)/-.*#\1#g'
    / 转义符号
    匹配以( 开始的内容 并以 /- 结束

    五. find 查找

    5.1 基础用法

           find     查找文件		
    
    		         -type   基于类型;f d s c b l     (例:#  find /path  -type  f)
    f 文件类型
    d 目录类型 -name 基于名称 -iname 忽略大小写 mtime 基于时间,文件修改时间
    +7: 7天以前 ( 保留最近7天的数据 ,一般用于备份,仅保留最近7天数据)
    -7: 最近7天 ctime 显示文件属性修改时间
    atime 文件访问时间 perm 基于权限 (例如 -perm 644 ,只找出权限644,) 或者,-perm /u+r 属主有读权限,/g+r df 属组有读权限,/+r 有读权限的都找出来 -maxdepth 最大深度,最多查找几层内容 user 基于用户 onuser
    group 基于用户组 ongroup -a 与 并且
    -o 或 或者 (可以配合括号,ind /root/dir1 \( -name "file5" -o -name "file9" \) 或者关系)
    -not|! 非 动作,
    ok: 提示
    -exec 后面跟自定义 shell 命令(标准写法 -exec {} \; 使用xargs 替代; 将所有的结果打包一起直接作为参数传递;逐条执行
    例如 : find /home/test/ -type f -name "*.log*" -mtime +5 -exec rm -rf {} \;
    -exec 格式 -exec {} + (把结果一起合并处理,主要用于打包压缩这方面)
    -print: 默认;
    -ls: 可以使用xargs ls -l 替代
    -delete 删除查找到的文件(仅能删除空目录) 例: [root@oldboyedu ~]# find ./ -type f -name "file-*" -mtime +7 \ dirname /etc/passwd 取目录部分 (可以配合find 使用 排序 去重 前5)
    basename /etc/passwd 取文件名

    5.2 查找文件

    #01 查看指定名称的文件 以conf 结尾的
    [root@aliyun etc]# find /etc/* -type f -name "*conf"
    /etc/tuned/tuned-main.conf
    /etc/udev/udev.conf
    /etc/updatedb.conf
    /etc/usb_modeswitch.conf
    /etc/vconsole.conf
    /etc/wpa_supplicant/wpa_supplicant.conf
    /etc/wvdial.conf
    /etc/yum/version-groups.conf
    /etc/yum/protected.d/systemd.conf
    /etc/yum/pluginconf.d/langpacks.conf
    /etc/yum/pluginconf.d/fastestmirror.conf #02 找出/var/目录下 30天之前的 所有以 .log结尾的文件
    [root@aliyun var]# ll `find ./* -type f -iname "*.log" -mtime +30`
    -rw-------. 1 root root 0 3月 18 2021 ./log/anaconda/storage.log
    -rw------- 1 root root 0 12月 31 2021 ./log/boot.log
    -rw-r--r-- 1 root root 0 3月 18 2021 ./log/cloudinit-deploy.log
    -rw-r--r-- 1 root adm 100738 12月 30 2021 ./log/cloud-init.log
    -rw-r--r-- 1 root root 4689 12月 30 2021 ./log/cloud-init-output.log
    -rw-r--r-- 1 root root 366 12月 30 2021 ./log/ecs_network_optimization.log
    -rw-r--r-- 1 root root 1301 12月 30 2021 ./log/tuned/tuned.log 解释下:
    -mtime +30 代表文件修改时间 30天之前的 #03 找出/var/下面 所有以log结尾 并且30天之前 并且 (文件名以 program开头 或者 cloud-init开头的)所有文件
    [root@aliyun var]# ll `find ./* -type f -iname "*.log" -mtime +30 -a \( -name "program*" -o -name "cloud-init*" \) `
    -rw------- 1 root root 5406 12月 5 2020 ./lib/docker/overlay2/22972c932ed84fd81659df913f5129c47cc6ba78dafcda0459e8e44cffcc9951/diff/var/log/anaconda/program.log
    -rw-------. 1 root root 0 3月 18 2021 ./log/anaconda/program.log
    -rw-r--r-- 1 root adm 100738 12月 30 2021 ./log/cloud-init.log
    -rw-r--r-- 1 root root 4689 12月 30 2021 ./log/cloud-init-output.log 解释下:
    -a 并且
    -o 或者 或者关系需要 ()括起来

    六 时间管理 date

    6.1 基础用法

    		date
    +%F #Y年-m月-d日 ,2021-03-14 %Y-%m-%d
    +%T #H时-M分-S秒 %H:%M:%S
    +%w # 周
    +%s # 获取秒
    -d 根据指定描述 显示日期时间([root@localhost ~]# date -d 19990306 +%F ,可以配合其它选项使用)
    date -d '-1day' 显示昨天日期(可加可减)
    -s 修改系统时间 date -S "2016-11-11 00:00:00"
    date +"%F%T"

    6.2 显示时间

    #01 显示年月日
    [root@master01 ~]# date '+%Y-%m-%d %T'
    2023-07-23 20:18:45
    [root@master01 ~]# date +%Y-%m-%d_%T
    2023-07-23_20:18:53 #02 显示时分秒
    [root@master01 ~]# date +%T
    20:19:29
    [root@master01 ~]# date +%H:%M:%S
    20:19:45 #03 显示周
    [root@master01 ~]# date +%W
    29 解释下: 当前年的第多少周 #04 显示指定时间
    [root@master01 ~]# date -d 19961225
    1996年 12月 25日 星期三 00:00:00 CST [root@master01 ~]# date -d "1996-12-25 23:30:00"
    1996年 12月 25日 星期三 23:30:00 CST 解释下:
    显示指定时间:1996 12 25 #05 时间加减法
    [root@master01 ~]# date -d '2day'
    2023年 07月 25日 星期二 20:26:12 CST
    [root@master01 ~]# date -d '-2day'
    2023年 07月 21日 星期五 20:27:25 CST 解释下:
    默认是加 -d '2day' 当前时间加两天
    -d '-2day' 当前时间减两天

    6.3 修改时间

    #01 修改时间
    [root@master01 ~]# date -s "1996-12-25 23:30:00"
    1996年 12月 25日 星期三 23:30:00 CST [root@master01 ~]# date +%F_%T
    1996-12-25_23:30:23

    6.4 校验时间 ntpdate

    #01 NTP时间服务 自动校正时间
    [root@master01 ~]# yum install -y ntpdate #02 时间同步
    [root@master01 ~]# ntpdate ntp1.aliyun.com
    23 Jul 16:14:38 ntpdate[3434]: step time server 120.25.115.20 offset -19054.680538 sec

    七. 压缩三剑客

    7.1 基础用法

    		gzip    打包,只针对文件,后缀加 *
    
    				-d    解压 
    
             zcat  不解压,查看内容  zcat  /etc/yum.repos.d/CentOS-Debuginfo.repo.gz
    
    	    zip(常用)     命令可以对文件进行压缩打包,需要安装(yum install zip unzip -y)
    -r 递归压缩文件、目录 [root@localhost ~]# zip -r 需要解压的路径名称.zip 打包文件路径
    -p 不显示打包过程
    -T 查看压缩包是否完整 unzip 解压 ,默认解压到当前目录 (格式:zip -r dir.zip 路径dir/)
    -l 不解压压缩,查看压缩包内容
    -t 查看压缩包内容 ok 就是正常的
    -d /opt, 解压到指定目录 (格式 unzip filename.zip -d /opt/ ) tar 是linux下最常用的压缩与解压缩, 支持文件和目录的压缩归档 tf #查看压缩包内容
    xf #自动选择解压模式 ,智能 czf #打包tar.gz格式
    cjf #打包tar.bz格式
    cJf #打包tar.xz格式 c #创建新的归档文件
    x #对归档文件解包
    v #输出命令的归档或解包的过程
    t #列出归档文件里的文件列表
    f #指定包文件名,多参数f写最后 z #使用gzip压缩归档后的文件(.tar.gz)
    j #使用bzip2压缩归档后的文件(.tar.bz2)
    J #使用xz压缩归档后的文件(tar.xz)
    C #指定解压目录位置
    X #排除多个文件(写入需要排除的文件名称)
    h #打包软链接
    --hard-dereference #打包硬链接
    --exclude #在打包的时候写入需要排除文件或目录 (例,排除单个文件,[root@xuliangwei /]# tar czf etc.tar.gz --exclude=etc/services etc/)
    (例,排除多个文件,[root@xuliangwei /]# tar czf etc.tar.gz --exclude=etc/services --exclude=etc/rc.local etc/)
    [root@xuliangwei /]# tar czfX etc.tar.gz #paichu.list,需要排除的文件写进去# etc/

    7.2 gzip

    ## gzip 压缩只能针对文件 并且原文件会变成压缩包 并不会保留
    ## 优点 压缩比例高 #01 压缩.conf结尾的文件
    [root@master01 day11]# gzip *.conf #02 解压
    [root@master01 day11]# gzip -d * #03 查看压缩后大小
    1)压缩前大小
    [root@master01 day11]# ll | awk '{x=x+$5} END {print x}'
    249011 2)压缩后大小
    [root@master01 day11]# ll | awk '{x=x+$5} END {print x}'
    84066 #04 不解压查看压缩包内容
    [root@master01 day11]# zcat /etc/yum.repos.d/CentOS-Debuginfo.repo.gz
    [base-debuginfo]
    name=CentOS-7 - Debuginfo
    baseurl=http://debuginfo.centos.org/7/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-Debug-7
    enabled=0

    7.3 zip

      	    zip(常用)     命令可以对文件进行压缩打包,需要安装(yum install zip unzip -y)
    -r 递归压缩文件、目录 [root@localhost ~]# zip -r 需要解压的路径名称.zip 打包文件路径
    -p 不显示打包过程
    -T 查看压缩包是否完整 unzip 解压 ,默认解压到当前目录 (格式:zip -r dir.zip 路径dir/)
    -l 不解压压缩,查看压缩包内容
    -t 查看压缩包内容 ok 就是正常的
    -d /opt, 解压到指定目录 (格式 unzip filename.zip -d /opt/ )
    #01 需要下载 yum install -y unzip zip
    #可以打包文件和目录 和windows 通用 (源文件还存在) zip 压缩包名称和路径 需要压缩的目录或者文件 -r 递归意思,压缩目录必用 #02 压缩目录
    [root@master01 opt]# zip -r day11.zip day11 #03 压缩到指定目录
    [root@master01 opt]# zip -r /opt/day`date +%F_%T`.zip day11 #04 压缩文件
    1)压缩
    [root@master01 day11]# zip yum.conf.zip yum.conf
    2)检查
    [root@master01 day11]# ll yum.conf*
    -rw-r--r-- 1 root root 970 7月 23 20:51 yum.conf
    -rw-r--r-- 1 root root 743 7月 23 21:16 yum.conf.zip #04 解压目录和文件
    1)解压文件
    [root@master01 day11]# unzip yum.conf.zip 2)解压目录
    [root@master01 opt]# unzip day11_bak.zip 3)不解压查看内容
    [root@master01 day11]# unzip -l ddddddddd.zip 4)不解压查看压缩包是否完整
    [root@master01 opt]# unzip -t ddddddddd.zip
    [root@master01 day11]# unzip -t yum.conf.zip
    Archive: yum.conf.zip
    testing: yum.conf OK
    No errors detected in compressed data of yum.conf.zip. 5)解压到指定目录
    [root@master01 opt]# unzip -d /tmp/tets/ ddddddddd.zip
    解释下:解压到指定目录 /tmp/tets

    7.4 tar 经常用

      #语法格式
    tar czf /opt/test.tar.gz /tmp/tets
    tar 压缩后的名称 压缩谁? tar 是linux下最常用的压缩与解压缩, 支持文件和目录的压缩归档 tf #查看压缩包内容
    xf #自动选择解压模式 ,智能 czf #打包tar.gz格式
    cjf #打包tar.bz格式 # 都不用
    cJf #打包tar.xz格式 # 都不用 c #创建新的归档文件
    x #对归档文件解包
    v #输出命令的归档或解包的过程
    t #列出归档文件里的文件列表
    f #指定包文件名,多参数f写最后 z #使用gzip压缩归档后的文件(.tar.gz)
    j #使用bzip2压缩归档后的文件(.tar.bz2)
    J #使用xz压缩归档后的文件(tar.xz)
    C #指定解压目录位置
    X #排除多个文件(写入需要排除的文件名称)
    h #打包软链接
    --hard-dereference #打包硬链接
    --exclude #在打包的时候写入需要排除文件或目录
    #01 打包文件和目录
    1)打包目录
    [root@master01 opt]# tar czf etc.tar.gz etc/
    [root@master01 opt]# ll
    -rw-r--r-- 1 root root 11382257 7月 23 23:12 etc.tar.gz 2)创建大文件 压缩文件
    [root@master01 opt]# dd if=/dev/zero of=test bs=1000k count=100 [root@master01 opt]# tar czf test.tar.gz test
    [root@master01 opt]# ll
    总用量 109M
    -rw-r--r-- 1 root root 98M 7月 23 23:17 test
    -rw-r--r-- 1 root root 98K 7月 23 23:19 test.tar.gz #02 查看压缩包内容
    [root@master01 opt]# tar tf etc.tar.gz #03 解压
    1)解压
    [root@master01 opt]# tar xf etc.tar.gz 2)解压到指定位置
    [root@master01 opt]# tar xf etc.tar.gz -C /tmp/
    [root@master01 opt]# ll /tmp/
    总用量 20
    drwxr-xr-x 89 root root 8192 7月 23 22:58 etc 解释下:
    -C 指定解压位置 #04 打包时候排除文件
    [root@master01 opt]# tar zcf etc-v2.tar.gz /etc --exclude /etc/vconsole.conf

    7.5 exec 管道命令

    -exec cmd {} ;

    #01 基本用法
    [root@master01 day11]# find /etc/* -type f -name "*.conf" -exec cp {} ./ \; 解释下:
    把/etc/下面所有以 .conf结尾的文件 复制到当前目录 #02 /etc/下面面所有以 .conf结尾的文件 打包为压缩包 (zip)
    [root@master01 opt]# find /etc/* -type f -name "*.conf" -exec zip bak.zip {} \;

    7.6 xargs 管道命令

    xargs       前者的结果 作为管道后者的参数
    -n 分组;
    -i {} 把前者的结果放入{}里
    #01 基本使用 复制文件
    [root@master01 day11]# find /etc/* -type f -name "*.conf" | xargs -i cp {} ./ 解释下:
    把/etc/下面所有以 .conf结尾的文件 复制到当前目录 #02 把/etc/下面面所有以 .conf结尾的文件 打包为压缩包 (zip)
    [root@master01 opt]# find /etc/* -type f -name "*.conf" | xargs -i zip q.zip {} 解释下:
    等同于:zip q.zip $(find /etc/* -type f -name "*.conf") #03 把/var/log 下面面所有以 .log结尾的文件 并且是 3天前 打包为压缩包 (tar.gz)
    [root@master01 ~]# find /var/log/* -type f -name "*.log" -mtime +3 | xargs -i tar zcf /backer/log_`date +%F_%T`.tar.gz {}

    linux 三剑客命令的更多相关文章

    1. 快速掌握Linux三剑客命令使用

      前言 Linux三剑客指的是grep.sed以及awk命令的使用,这三个命令功能异常强大,大到没朋友.grep命令主打"查找",sed命令主打"编辑",awk命 ...

    2. linux 三剑客命令(grep,sed ,awk)

      grep 命令 :强大的文本’搜索’工具    1.grep   -n   'word'  file_name 在file_name文件中找到word所在的所有行并显示.-n 为显示行号.     2 ...

    3. Linux三剑客命令使用(持续更新)

      (本文档内容部分来源于网络) awk删除文件第一列 1.采用awk awk '{$1="";print $0}' file 2.采用sed sed -e 's/[^]* //' f ...

    4. Linux常用基本命令:三剑客命令之-awk基础用法

      awk是一个超级强大的文本格式化处理工具,他与grep, sed命令被成为linux 三剑客命令 三剑客命令的特点: grep:只要用来匹配和查找文本 sed: 编辑匹配到文本 awk: 格式化文本, ...

    5. Linux实战教学笔记12:linux三剑客之sed命令精讲

      第十二节 linux三剑客之sed命令精讲 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件 ...

    6. Linux awk命令 --三剑客老大

      Linux awk命令 --三剑客老大 基本用法: awk  [参数]  ['找谁{干啥}']  文件 参数: -F 分隔符 -v 创建或修改awk变量 OFS 输出分割符 awk显示每一列的时候分隔 ...

    7. day14 linux三剑客之sed命令

      day14 linux三剑客之sed命令 sed命令 Sed 主要用来自动编辑一个或多个文件.简化对文件的反复操作.编写转换程序等. sed(流式编辑器) : sed主要用来修改文件. 1.sed命令 ...

    8. 快速上手Linux核心命令(五):文本处理三剑客

      @ 目录 前言 正则表达式 第一剑客 grep 第二剑客 sed 第三 剑客 awk 小结 剑仙镇楼~ O(∩_∩)O 前言 上一篇中已经预告,我们这篇主要说Linux文本处理三剑客.他们分别是gre ...

    9. Linux 基础命令

      man      帮助命令   命令 --help   命令的简单帮助 help      命令的帮助(bash的内置命令) mkdir    创建目录  如makdir /data mkdir   ...

    10. Linux实战教学笔记18:linux三剑客之awk精讲

      Linux三剑客之awk精讲(基础与进阶) 标签(空格分隔): Linux实战教学笔记-陈思齐 快捷跳转目录: * 第1章:awk基础入门 * 1.1:awk简介 * 1.2:学完awk你可以掌握: ...

    随机推荐

    1. 学科知识图谱学习平台项目 :技术栈Java、Neo4j、MySQL等超详细教学

      学科知识图谱学习平台项目 :技术栈Java.Neo4j.MySQL等超详细教学 0.效果展示 1.安装教程 安装Java SDK 11,下载前需要登录Oracle账号,下载链接,安装教程,测试是否能在 ...

    2. Python Selenium 库使用技巧

      Selenium 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE,Mozilla Firefox,Safari,Google ...

    3. Webpack基础学习(一) (未完结)

      一.Webpack介绍与基本使用 1.1.Webpack是什么? Webpack 是一个静态资源打包工具. 它会以一个或多个文件作为打包的入口,将我们整个项目所有文件编译组合成一个或多个文件输出出去. ...

    4. windows10 安装运行docker

      windows10 安装使用docker part01.windows设置 启用windows 虚拟化 任务管理器-性能-CPU-虚拟化启用 启用Hyper-v 控制面板(Win+R -> 输入 ...

    5. 教你用CSS实现表单部件

      案例介绍 欢迎来到我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用CSS编程实战案例,使用 列表标签完成一个下拉菜单样式的表单部件. 案例演示 运行代码后在浏览器弹出由 标签组成的下拉菜单样 ...

    6. FDConnection的事务测试讲解。。

      总之用事务的宗旨是: 1.不用嵌套事务EnableNested设置为False 2.事务一定要回滚,避免发生异常的情况下,没有回滚 造成,不可估量的错误. try frmClientDm.MyMain ...

    7. 2021 ASP.NET Core 开发者路线图

      GitHub地址:https://github.com/MoienTajik/AspNetCore-Developer-Roadmap/blob/master/ReadMe.zh-Hans.md

    8. Linux防火墙操作命令(开放或关闭端口)

      在外部访问CentOS中部署应用时,需要通过防火墙管理软件,开端口,或者直接关闭防火墙进行解决(不建议) 常用命令:systemctl start firewalld               #启 ...

    9. 迟来的HIT2024和realworld2024体验赛WP

      目录 前言碎语 2024.2.14 中午 rwctf2024 体验赛 vision 哈工大青训营2024 结营赛 计算器 小技巧 神奇玩意 gdb! 再也不用苦哈哈往回翻 跟踪fork 赛后复现rw ...

    10. CF327C Magic Five 题解

      题目传送门 前置知识 等比数列求和公式 | 乘法逆元 解法 设 \(lena\) 表示 \(a\) 的长度. 首先,若一个数能被 \(5\) 整除,则该数的末尾一定为 \(0\) 或 \(5\).故考 ...