Linux基础--基础命令

系统操作命令

系统关机

​ shutdown

 [root@oldboyedu oldboy04]# shutdown 
       Shutdown scheduled for Fri 2019-03-29 11:36:45 CST, use 'shutdown -c' to cancel.
	   定义一个关机方案=定义什么时间进行关机,使用shutdown -c 取消关机计划
	   
[root@oldboyedu oldboy04]# 
       Broadcast message from root@oldboyedu.com (Fri 2019-03-29 11:35:45 CST):
	   会将关机信息广播给所有关机主机的用户
       
       The system is going down for power-off at Fri 2019-03-29 11:36:45 CST!
	   准备什么时间真正进行关机

shutdown -h 5 -----------指定五分钟后关机

系统重启

  1. shutdown -r 5
    [root@oldboyedu ~]# shutdown -r 5
           Shutdown scheduled for Fri 2019-03-29 12:02:41 CST, use 'shutdown -c' to cancel.
           [root@oldboyedu ~]# 
           Broadcast message from root@oldboyedu.com (Fri 2019-03-29 11:57:41 CST):
           
           The system is going down for reboot at Fri 2019-03-29 12:02:41 CST!
    
  2. reboot

    立即重启

常用的系统命令

  1. ip address show/ip a 检查网卡地址配置

  2. ping 测试网络连通性

  3. nmtui 图形界面修改网卡地址信息

  4. exit 注销

  5. shutdown 关机命令
    shutdown -h 5 指定关机时间 (推荐)
    shutdown -r 5 重启主机时间 (推荐)
    shutdown -c 取消关机或重启计划
    shutdown -h now/0 立即关机
    shutdown -r now/0 立即重启
    halt 直接关机
    poweroff 直接关机
    reboot 直接重启

  6. list=ls 查看文件或目录是否存在
    ls 文件或目录路径信息
    ls -d 目录信息
    ls -l 文件或目录信息 查看数据的属性信息
    ls -la 目录信息 查看目录中隐藏文件
    ls -lt 目录信息 将目录中的信息按照时间进行排序显示
    ls -ltr 目录信息 按照时间信息,进行反向排序
    ls -lh 数据信息 显示的数据信息大小,以人类可读方式显示

  7. make directory=mkdir 创建目录
    mkdir -p 多级目录 创建多级目录/忽略错误提示

  8. manual=man 查看命令手册信息
    man 查看的命令
    NAME 命令作用说明
    mkdir - make directories
    SYNOPSIS 命令使用方法
    mkdir [OPTION]... DIRECTORY...
    DESCRIPTION 命令的参数解释
    -p, --parents
    no error if existing, make parent directories as needed

  9. change directory==cd 切换目录命令
    cd /xxx 绝对
    cd xxx 相对
    cd .. 上一级
    cd ../../ 上多级
    cd - 返回上一次所在路径
    cd/cd ~ 返回到用户家目录

  10. vi 编辑文件内容
    vi 文件信息
    i --- 进入编辑模式
    esc --- 退出编辑模式
    :wq --- 保存并退出
    :w
    :q
    :wq!--- 强制保存退出
    :q! --- 强制退出

    命令模式-->插入模式
    i --- 表示从光标所在位置进入编辑状态
    I --- 表示将光标移动到一行的行首,再进入编辑状态
    o --- 在光标所在行的下面,新起一行进行编辑
    O --- 在光变所在行的上面,新起一行进行编辑
    a --- 将光标移动到右边的下一个字符,进行编辑
    A --- 将光标移动到一行的行尾,进入到编辑状态
    C --- 将光标到行尾内容进行删除,并进入编辑状态
    cc --- 将整行内容进行删除并进入编辑状态
    总结:移动光标位置,并进入编辑状态方法

    只移动光标,不进入编辑状态
    大写字母G 将光标快速切换尾部
    小写字母gg 将光标快速切换首部
    ngg n表示移动到第几行
    $ 将光标移动到一行的结尾
    0/^ 将光标移动到一行的行首

    命令模式--底行模式
          输入一些命令
    

    / 进入搜索状态(向下搜索 n依次向下)
    ? 进入搜索状态(向上搜索 n依次向上)

    特殊使用技巧:
    将一行内容进行删除(剪切) deletedelete=dd
    将多行内容进行删除(剪切) 3dd
    将内容进行粘贴 p
    粘贴多次内容 3p
    复制一行内容 yy
    复制多行内容 3yy
    操作错误如何还原 小写字母u undo

  11. echo 将信息输出到屏幕上
    echo "oldboy 深圳"

  12. cat 查看文件内容信息
    cat -n 文件信息 显示文件内容行号信息

  13. cp 复制文件或目录数据到其他目录中
    cp -r 递归复制目录数据
    cp 强行覆盖数据

  14. rm 删除数据命令
    rm -r 递归删除数据
    rm -f/ m 强制删除数据,不需要进行确认

  15. mv 移动剪切数据信息

  16. mount 对存储设备进行挂载
    mount 存储设备文件 挂载点
    umount 对存储设备进行卸载
    umount 挂载点

  17. hostname 查看修改主机名称

  18. hostnamectl 直接修改主机名称(centos7)
    hostnamectl set-hostname 主机名称

  19. df 查看磁盘挂载情况/查看磁盘使用情况
    df -h 以人类可读方式查看磁盘使用情况

  20. source 立即加载文件配置信息
    /etc/profile
    /etc/bashrc
    ~/.bashrc
    ~/.bash_profile
    /etc/sysconfig/i18n --- centos6字符集配置文件
    /etc/locale.conf --- centos7字符集配置文件

  21. which 显示命令文件所在路径位置
    which 命令

  22. export 定义环境变量
    export 环境变量=xxx

  23. alias 设置系统别名命令
    alias 别名='命令信息'

  24. unalias 取消系统别名命令
    unalias 别名

  25. head 查看文件前几行内容(默认前10行)
    head -5 查看前5行

  26. tail 查看文件后几行内容(默认后10行)
    tail -5 查看后5行
    tail -f 一直追踪一个文件内容变化

  27. yum 下载并安装软件命令
    yum install -y 名称 直接安装软件
    yum groupinstall -y 包组名称 直接安装软件包组
    yum repolist 查看yum源信息
    yum list 查看哪些软件可以安装/查看所有系统已安装的软件
    yum grouplist 查看哪些软件包组可以安装/查看所有系统已安装的软件包组
    yum --help help参数可以只显示命令的参数帮助信息
    yum provides locate 获取命令属于哪个软件大礼包

  28. ps 查看系统进程信息
    ps -ef 查看所有详细的进程信息

  29. kill 删除指定进程
    kill pid 删除指定pid号码的进程
    kill -9 pid 强制删除指定pid号码的进程

  30. free 查看内存命令
    free -h 人类可读方式查看

  31. lscpu 查看CPU信息

  32. w 查看负载信息/查看系统用户登录信息

  33. useradd 创建用户(用户管理)
    useradd 用户名

  34. passwd 设置用户密码命令
    passwd 用户名 指定修改哪个用户的密码
    passwd 修改当前用户密码

  35. su 切换用户命令
    su - 用户名称

  36. id 检查创建的用户是否存在
    id 用户名

  37. whoami 确认用户身份

  38. rpm 管理软件程序包的
    rpm -qa 软件名称 查看软件大礼包是否安装成功
    rpm -ql 软件名称 查看软件大礼包中都有什么
    rpm -qf 文件名称(绝对路径) 查看文件属于哪个软件大礼包

  39. systemctl 管理服务程序的运行状态
    systemctl start 服务名称 --- 启动服务
    systemctl stop 服务名称 --- 停止服务
    systemctl restart 服务名称 --- 重启服务
    systemctl status 服务名称 --- 查看服务详细的运行状态
    systemctl disable 服务名称 --- 让服务开机不要运行
    systemctl enable 服务名称 --- 让服务开机运行
    systemctl is-active 服务名称 --- 检查确认服务是否运行
    systemctl is-enabled 服务名称 --- 检查确认服务是否开机运行

  40. localectl set-locale LANG=zh_CN.UTF-8 --- centos7修改字符集信息

  41. less/more 逐行或逐页查看文件信息内容

  42. whereis 查看命令所在路径以及命令相关手册文件所在路径

  43. locate 查看文件所在路径信息
    updatedb 更新文件所在路径的索引数据库表

  44. file 查看文件的类型
    file 文件信息

  45. stat 查看数据详细属性信息
    stat file.txt 看到文件的三个时间信息

  46. tar 压缩数据命令
    -z 压缩类型
    -c 创建压缩包
    -v 显示过程
    -f 指定压缩文件路径
    -x 解压文件
    -t 查看压缩文件内容
    --exclude 排除指定文件不被压缩处理
    --exclude-from

  47. xargs 分组命令 按照分组显示
    xargs -n1 <文件

    总结: <
    tr xxx <
    xargs <

  48. tree 显示目录结构树
    tree -L 1 查看下几级目录机构
    tree -d 目录结构中目录信息

  49. date 查看时间信息和修改时间信息
    date "+%F_%T"
    date -s 设置系统时间
    date -d 显示未来或过去的时间信息

  50. ln 创建链接文件
    ln 源文件 链接文件 创建硬链接
    ln -s 创建软链接

  51. wc 统计命令
    wc -l 统计有多少行

  52. chmod 修改文件目录数据权限信息
    chmod u/g/o
    chmod a

  53. useradd 创建用户命令
    -s /sbin/nologin 指定用户shell登录方式
    -M 不创建家目录
    -u 指定用户uid信息
    -g 指定用户所属主要组信息
    -G 指定用户所属附属组信息
    -c 指定用户注释信息

  54. usermod 修改用户信息
    -s /sbin/nologin 指定用户shell登录方式
    -u 指定用户uid信息
    -g 指定用户所属主要组信息
    -G 指定用户所属附属组信息
    -c 指定用户注释信息

  55. userdel 删除用户信息
    userdel -r 彻底删除用户和家目录信息

  56. groupadd 创建用户组
    groupmod 修改用户组
    groupdel 删除用户组

  57. chown 修改用户属主和属组的信息
    chown -R 递归修改用户属主和属组信息

  58. sort 排序命令
    sort -n 按照数值进行排序
    sort -k1 按照指定列进行排序

  59. dd 模拟创建出指定大小的文件
    dd if=/dev/zero of=/tmp/oldboy.txt bs=10M count=100
    从哪取出数据 放到哪 占用1个block多少空间 总共使用多少个block

  60. du 查看目录的大小
    du -sh 汇总查看目录大小,以人类可读方式

高级命令:

老四 find 查询文件所在路径

find /oldboy -type 文件类型 -name "文件名称"
find /oldboy -type f -mtime +10 -delete --- 删除历史数据信息
find /oldboy -type f -size +10 -delete --- 删除大于10k文件
-maxdepth 查找目录层级的深度
-inum 根据文件inode信息查找
-exec 对查找出的数据进行相应处理
-perm 根据权限查找数据信息
-iname 忽略名称大小写

老三 grep 文件 对信息进行过滤筛选

grep -B n 显示指定信息前几行内容
grep -A n 显示指定信息后几行内容
grep -C n 显示指定信息前后几行内容
grep -c 显示指定信息在文件中有多少行出现
grep -v 进行取反或者排除
grep -E/egrep 识别扩展正则符号
grep -o 显示过滤过程信息
grep -n 过滤信息并显示信息行号
grep -i 过滤信息忽略大小写

编辑一个测试文件
	[root@oldboyedu ~]# cat >> /oldboy/test.txt <<EOF
    > oldboy01
    > oldgirl01
    > olddog01
    > oldboy02
    > oldgirl02
    > olddog02
    > EOF
    [root@oldboyedu ~]# cat /oldboy/test.txt 
    oldboy01
    oldgirl01
    olddog01
    oldboy02
    oldgirl02
    olddog02
	需求01: 请筛选出有oldboy的信息
	[root@oldboyedu ~]# grep "oldboy" /oldboy/test.txt 
    oldboy01
    oldboy02
	需求02: 筛选有oldgirl的信息,但是要有oldgirl信息的上一行信息也显示
	[root@oldboyedu ~]# grep -B 1  "oldgirl" /oldboy/test.txt 
    oldboy01
    oldgirl01
    --
    oldboy02
    oldgirl02
	需求03: 筛选有oldgirl的信息,但是要有oldgirl信息的下一行信息也显示
    [root@oldboyedu ~]# grep -A 1  "oldgirl" /oldboy/test.txt 
    oldgirl01
    olddog01
    --
    oldgirl02
    olddog02
	需求04.筛选有oldgirl的信, 但是要有oldgirl信息的下一行和下一行信息也显示
	[root@oldboyedu ~]# grep -C 1  "oldgirl" /oldboy/test.txt 
    oldboy01
    oldgirl01
    olddog01
    oldboy02
    oldgirl02
    olddog02
	需求05. 统计oldgirl信息在文件中出现了几次
	[root@oldboyedu ~]# grep -c  "oldgirl" /oldboy/test.txt 
sed命令 字符流编辑工具(行编辑工具)==按照每行中的字符进行处理操作
sed命令作用说明:
  1. 擅长对行进行操作处理

  2. 擅长将文件的内容信息进行修改调整、删除

    自动修改网卡地址脚本:

    ​ 第一个步骤: 修改地址
    ​ sed -i "s#10.0.0.200#10.0.0.201#g" ifcfg-eth0

    ​ 第二个步骤: 重启网络服务
    ​ systemctl restart network

    ​ 第三个步骤: 过滤ip a s eth0 网卡地址信息存储到一个文件中 共享存储

    ​ 具体功能作用:
    ​ 1) 文件中添加信息的能力 (增) ok
    ​ 2) 文件中删除信息的能力 (删) ok
    ​ 3) 文件中修改信息的能力 (改)
    ​ 4) 文件中查询信息的能力 (查) OK

sed语法信息
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
 命令 参数        条件+处理= (指令)                  处理文件信息

显示出文件中有oldboy行的信息
sed -n '/oldboy/p' oldboy.txt

sed命令实践操作
创建测试环境:
cat >person.txt<<EOF
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
EOF	

    a sed命令查询信息方法
	根据文件内容的行号进行查询:
	测试1: 显示单行信息
	[root@oldboyedu ~]# sed -n '3p' person.txt 
    103,Alex,COO
	测试2: 根据行号信息,输出多行内容(连续)
	[root@oldboyedu ~]# sed -n '1,3p' person.txt 
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
	测试3: 根据行号信息,输出多行内容(不连续)
    [root@oldboyedu ~]# sed -n '1p;3p' person.txt 
    101,oldboy,CEO
    103,Alex,COO

	根据文件内容的信息进行查询:
	测试1: 根据内容信息,输出单行内容
	#将有oldboy行的信息找出来
    [root@oldboyedu ~]# sed -n '/oldboy/p' person.txt 
    101,oldboy,CEO

    测试2: 根据内容信息,输出多行内容(连续)
	#将有oldboy到alex行的信息都输出出来
	[root@oldboyedu ~]# sed -n '/oldboy/,/Alex/p' person.txt 
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO

	测试3: 根据内容信息,输出多行内容(不连续)
	#将有oldboy和alex行的信息都输出出来
	[root@oldboyedu ~]# sed -n '/oldboy/p;/Alex/p' person.txt 
    101,oldboy,CEO
    103,Alex,COO
    106,oldboy,CIO

    b sed命令添加信息方法
    在文件第一行添加信息:
    100,oldgirl,UFO
	[root@oldboyedu ~]# sed  '1i100,oldgirl,UFO' person.txt
    100,oldgirl,UFO
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO

    在文件最后一行添加信息:
	[root@oldboyedu ~]# sed  '$a108,oldgirl,UFO' person.txt
    100,oldgirl,UFO
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO
    108,oldgirl,UFO
测试练习
01. 在第三行后面添加oldboy.txt信息
	sed '3aoldboy.txt' person.txt
	02. 在第二行前面添加oldboy.txt信息
	sed '2ioldboy.txt' person.txt
	03. 在有oldboy行的前面添加oldgirl 后面添加olddog信息
	sed -e '/oldboy/ioldgirl' -e  '/oldboy/aolddog' person.txt
	
	[root@oldboyedu ~]# sed -e '/oldboy/ioldgirl' -e  '/oldboy/aolddog' person.txt
    100,oldgirl,UFO
    oldgirl
    101,oldboy,CEO
    olddog
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    oldgirl
    106,oldboy,CIO
    olddog
	
	sed  '$a100
101' person.txt  添加多行信息
	企业中编写配置文件:
	IPaddress=10.10.10.1
	mask=255.255.255.0
	gateway=10.10.10.254
	
	sed '$aIPaddress=10.10.10.1
mask=255.255.255.0
gateway=10.10.10.254' 文件名称

    c sed命令删除信息方法
	练习:
	01. 删除单行信息
	[root@oldboyedu ~]# #删除文件中第三行信息
    [root@oldboyedu ~]# sed '3d' person.txt 
    100,oldgirl,UFO
    101,oldboy,CEO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO
	
	02. 删除多行信息
    [root@oldboyedu ~]# #删除文件中第二行到第六行内容
    [root@oldboyedu ~]# sed '2,6d' person.txt 
    100,oldgirl,UFO
    106,oldboy,CIO
	
	测试: 
	01. 删除有oldboy信息的行
	sed '/oldboy/d' person.txt 
	
	02. 删除第三行和第六行
	[root@oldboyedu ~]# #删除文件中第二行到第六行内容
    [root@oldboyedu ~]# sed '2,6d' person.txt 
    100,oldgirl,UFO
    106,oldboy,CIO
    
    [root@oldboyedu ~]# sed '3d;6d' person.txt 
    100,oldgirl,UFO
    101,oldboy,CEO
    103,Alex,COO
    104,yy,CFO
    106,oldboy,CIO
	
	问题: 如何利用sed命令取消空行显示
	[root@oldboyedu ~]# sed -n '/./p' person.txt 
    100,oldgirl,UFO
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO
    
    [root@oldboyedu ~]# sed '/^$/d' person.txt 
    100,oldgirl,UFO
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO
    
    [root@oldboyedu ~]# sed -n '/^$/!p' person.txt 
    100,oldgirl,UFO
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO

	d sed命令修改信息方法
	
	sed 's#原有内容#修改后内容#g' 文件信息  
	[root@oldboyedu ~]# sed 's##oldgirl#old#g' person.txt 
    sed: -e expression #1, char 12: unknown option to `s'
    [root@oldboyedu ~]# sed 's/#oldgirl/old/g' person.txt 
    100,old,UFO
    
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    
    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO
	
	sed 's#()#
#g' 文件信息 后项引用前项进行替换修改
    利用sed命令取出IP地址信息:
	第一个历程: 取出有IP地址的行
	[root@oldboyedu ~]# ip a s eth0|sed -n '3p'
    inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
	
	第二个历程: 取出IP地址
	[root@oldboyedu ~]# ip a s eth0|sed -n '3p'|sed -r 's#^.*net (.*)#1#g'
    10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
    [root@oldboyedu ~]# ip a s eth0|sed -n '3p'|sed -r 's#^.*net (.*)#1#g'|sed -r 's#(.*)/24.*#1#g'
    10.0.0.200

	sed -r 's#^.*net (.*)#1#g'|sed -r 's#(.*)/24.*#1#g'  进行整合
	ip a s eth0|sed -n '3p'|sed -r 's#^.*net (.*)/24.*#1#g'
	
	sed -n '3p'|sed -r 's#^.*net (.*)/24.*#1#g'  进行整合 
	
	sed -n '3                        p'
	sed -r 's#^.*net (.*)/24.*#1#g'
	sed -rn '3s#^.*net (.*)/24.*#1#gp'  
	最终取IP地址方法
	[root@oldboyedu ~]# ip a s eth0|sed -rn '3s#^.*net (.*)/24.*#1#gp'
    10.0.0.200

    补充01: 修改文件内容直接进行自动备份
	[root@oldboyedu ~]# sed -i.bak  's#oldboy#oldold#g' person.txt 
    [root@oldboyedu ~]# ll person.txt.bak 
    -rw-r--r--. 1 root root 104 Oct 10 11:40 person.txt.bak
    [root@oldboyedu ~]# cat person.txt.bak 
    100,#oldgirl,UFO
    
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    
    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO

    补充02: 在真实替换文件内容时候,一定不能让n和i参数同时出现
    [root@oldboyedu ~]# sed -ni 's#Alex#aaaa#gp' person.txt
    103,aaaa,COO
	[root@oldboyedu ~]# cat person.txt
    103,aaaa,COO
	说明: ni和参数同时使用,会将文件内容进行清空


	测验替换功能:
	创建测试环境:
	-rw-r--r--. 1 root root      0 Oct 10 02:10 oldboy01.txt
    -rw-r--r--. 1 root root      0 Oct 10 02:10 oldboy02.txt
    -rw-r--r--. 1 root root      0 Oct 10 02:10 oldboy03.txt
    -rw-r--r--. 1 root root      0 Oct 10 02:10 oldboy04.txt
    -rw-r--r--. 1 root root      0 Oct 10 02:10 oldboy05.txt
    -rw-r--r--. 1 root root      0 Oct 10 02:10 oldboy06.txt
    -rw-r--r--. 1 root root      0 Oct 10 02:10 oldboy07.txt
    -rw-r--r--. 1 root root      0 Oct 10 02:10 oldboy08.txt
    -rw-r--r--. 1 root root      0 Oct 10 02:10 oldboy09.txt
    -rw-r--r--. 1 root root      0 Oct 10 02:10 oldboy10.txt
	批量修改文件的扩展名称 将oldboyxx.txt扩展名修改为oldboyxx.jpg
	
	[root@oldboyedu oldboy]# ls oldboy*.txt|sed -r 's#(.*)txt#mv & 1jpg#g'
    mv oldboy01.txt oldboy01.jpg
    mv oldboy02.txt oldboy02.jpg
    mv oldboy03.txt oldboy03.jpg
    mv oldboy04.txt oldboy04.jpg
    mv oldboy05.txt oldboy05.jpg
    mv oldboy06.txt oldboy06.jpg
    mv oldboy07.txt oldboy07.jpg
    mv oldboy08.txt oldboy08.jpg
    mv oldboy09.txt oldboy09.jpg
    mv oldboy10.txt oldboy10.jpg
    mv oldboy.txt oldboy.jpg
    [root@oldboyedu oldboy]# ls oldboy*.txt|sed -r 's#(.*)txt#mv & 1jpg#g'|bash
	
	批量重命名专业命令: rename
    rename  .txt                           .jpg                 oldboy*.txt
	命令    文件名称需要修改的部分信息    修改成什么信息      将什么样的文件进行修改
	
	[root@oldboyedu ~]# cat person.txt|sed -i 's#COO#CEO#g'
    sed: no input files
    [root@oldboyedu ~]# sed -i 's#COO#CEO#g' person.txt

	
	文件中添加内容方法:
	01. vim/vi 
	02. cat >>xxx<EOF .. EOF 
	03. echo -e "xxx
xxx"
	04. sed 'na/i xxxx
xxxx
sxxxx'
sed命令总结

p print 输出信息
i insert 插入信息,在指定信息前面插入新的信息
a append 附加信息,在指定信息后面附加新的信息
d delete 删除指定信息
s substitute 替换信息 s###g(全局替换)
c 替换修改指定的一整行信息
[root@oldboyedu ~]# sed '2coldboyedu-sz-01' person.txt
103,aaaa,CEO
oldboyedu-sz-01

总结: sed命令的参数信息
-n 取消默认输出
-r 识别扩展正则
-i 真实编辑文件(将内存中的信息覆盖到磁盘中)
-e 识别sed命令多个操作指令

awk命令
特点作用
  1. 排除信息
  2. 查询信息
  3. 统计信息
  4. 替换信息
语法格式
sed [参数] '条件-处理方式' 文件 
awk [参数] '模式-动作'     文件
awk实际操作
  1. 准备测试环境

    [root@oldboyedu ~]# cat awk_test.txt 
        Zhang	Dandan		41117397	:250:100:175
        Zhang	Xiaoyu		390320151	:155:90:201
        Meng	Feixue		80042789	:250:60:50
        Wu	Waiwai		70271111	:250:80:75
        Liu	Bingbing	41117483	:250:100:175
        Wang	Xiaoai		3515064655	:50:95:135
        Zi	Gege		1986787350	:250:168:200
        Li	Youjiu		918391635	:175:75:300
        Lao	Nanhai		918391635	:250:100:175
    
  2. 命令查询信息方法:
    按照行号查询信息:

    	awk 'NR=2' awk_test.txt
    	[root@oldboyedu ~]# awk 'NR=2' awk_test.txt
        Zhang	Dandan		41117397	:250:100:175
        Zhang	Xiaoyu		390320151	:155:90:201
        Meng	Feixue		80042789	:250:60:50
        Wu	Waiwai		70271111	:250:80:75
        Liu	Bingbing	41117483	:250:100:175
        Wang	Xiaoai		3515064655	:50:95:135
        Zi	Gege		1986787350	:250:168:200
        Li	Youjiu		918391635	:175:75:300
        Lao	Nanhai		918391635	:250:100:175
        [root@oldboyedu ~]# awk 'NR==2' awk_test.txt
        Zhang	Xiaoyu		390320151	:155:90:201
        [root@oldboyedu ~]# awk 'NR==2,NR==4' awk_test.txt
        Zhang	Xiaoyu		390320151	:155:90:201
        Meng	Feixue		80042789	:250:60:50
        Wu	Waiwai		70271111	:250:80:75
        [root@oldboyedu ~]# awk 'NR==2;NR==4' awk_test.txt
        Zhang	Xiaoyu		390320151	:155:90:201
        Wu	Waiwai		70271111	:250:80:75
    	
    	ps: 在linux系统中
    	oldboy=10  	赋值变量信息
    	oldboy==2  	真正oldboy等于数值2
    	
        按照字符查询信息:
        [root@oldboyedu ~]# awk '/Xiaoyu/' awk_test.txt
        Zhang	Xiaoyu		390320151	:155:90:201
        [root@oldboyedu ~]# awk '/Xiaoyu/,/Waiwai/' awk_test.txt
        Zhang	Xiaoyu		390320151	:155:90:201
        Meng	Feixue		80042789	:250:60:50
        Wu	Waiwai		70271111	:250:80:75
        [root@oldboyedu ~]# awk '/Xiaoyu/;/Waiwai/' awk_test.txt
        Zhang	Xiaoyu		390320151	:155:90:201
        Wu	Waiwai		70271111	:250:80:75
    	
    	测验:
    	01. 显示xiaoyu的姓氏和ID号码(???)
    	[root@oldboyedu ~]# awk '/Xiaoyu/{print $1","$3}' awk_test.txt 
        Zhang,390320151
        [root@oldboyedu ~]# awk '/Xiaoyu/{print $1,$3}' awk_test.txt 
        Zhang 390320151
    	
    	02. 姓氏是zhang的人,显示他的第二次捐款金额及他的名字
    	[root@oldboyedu ~]# awk '/Zhang/{print $4}' awk_test.txt 
        :250:100:175
        :155:90:201
        [root@oldboyedu ~]# awk '/Zhang/{print $NF}' awk_test.txt 
        :250:100:175
        :155:90:201
        [root@oldboyedu ~]# awk '/Zhang/{print $NF}' awk_test.txt|awk -F ":" '{print $3}'
        100
        90
    	
    	awk '/Zhang/{print $NF}' 
    	awk -F ":" '{print $3}'
        [root@oldboyedu ~]# awk -F ":" '/^Zhang/{print $3}' awk_test.txt 
        100
        90
    
        [root@oldboyedu ~]# awk -F "[ :]+" '/^Zhang/{print $1,$2,$5}' awk_test.txt 
        Zhang Dandan 100
        Zhang Xiaoyu 90
        [root@oldboyedu ~]# awk -F "[ :]+" '/^Zhang/{print $1,$2,$(NF-1)}' awk_test.txt 
        Zhang Dandan 100
        Zhang Xiaoyu 90
    
        03. 显示所有以41开头的ID号码的人的全名和ID号码
    	[root@oldboyedu ~]# awk '$3~/^41/{print $1,$2,$3}' awk_test.txt 
        Zhang Dandan 41117397
        Liu Bingbing 41117483
    	
    	04. 显示所有ID号码最后一位数字是1或5的人的全名
        方法一:
    	awk '$3~/1$|5$/{print $1,$2}' awk_test.txt
    	[root@oldboyedu ~]# awk '$3~/1$|5$/{print $1,$2}' awk_test.txt|column -t
        Zhang  Xiaoyu
        Wu     Waiwai
        Wang   Xiaoai
        Li     Youjiu
        Lao    Nanhai
        Lao    Nanhai
    	
    	方法二:
    	[root@oldboyedu ~]# awk '$3~/[15]$/{print $1,$2}' awk_test.txt|column -t
      
        方法三:
    	[root@oldboyedu ~]# awk '$3~/(1|5)$/{print $1,$2}' awk_test.txt|column -t
    	
    	05. 显示Xiaoyu的捐款,每个捐款数值前面都有以$开头, 如$110$220$330
    	[root@oldboyedu ~]# awk '$2~/Xiaoyu/{print $NF}' awk_test.txt 
        :155:90:201
        [root@oldboyedu ~]# #gsub(/需要替换的信息/,"修改成什么信息",将哪列信息进行修改)
        [root@oldboyedu ~]# awk '$2~/Xiaoyu/{gsub(/:/,"$",$NF);print $NF}' awk_test.txt 
        $155$90$201
    
    	文件中空行进行排除/文件中注释信息进行排除
    	grep -Ev "^#|^$"  文件信息 
    	sed -n '/^#|^$/!p' 文件信息
    	awk '/^#|^$/'
    	[root@oldboyedu ~]# awk '$0~/^#|^$/'  awk_test.txt 
        #Liu    Bingbing 41117483    :250:100:175
        
        [root@oldboyedu ~]# awk '$0!~/^#|^$/'  awk_test.txt 
        Zhang  Dandan   41117397    :250:100:175
        Zhang  Xiaoyu   390320151   :155:90:201
        Meng   Feixue   80042789    :250:60:50
        Wu     Waiwai   70271111    :250:80:75
        Wang   Xiaoai   3515064655  :50:95:135
        Zi     Gege     1986787350  :250:168:200
        Li     Youjiu   918391635   :175:75:300
        Lao    Nanhai   918391635   :250:100:175
        Lao    Nanhai   918394135   :250:100:175
    

    总结:awk命令中$符号用法
    $1 $2 $3 : 取第几列信息
    $NF : 取最后一列
    $(NF-n) : 取倒数第几列
    $0 : 取所有列的信息

    如何利用awk取出IP地址信息
    ip a s eth0|awk -F "[ /]+" 'NR==3{print $5}'
    hostname -i

awk高级功能

a.对日志信息进行统计(计数)

b. 对日志信息数值进行求和 客户端-下载 服务端-上传 消耗网络流量
c . (数组)进行排序分析
排序
01 192.168.2.1 600 192 深圳 10万

​ 02 192.168.1.10 500 18 上海
​ 03 192.168.3.10 200 20 广州
​ 30 东北 2千

​ 运维总监---运营(推广)总监
​ d. 可以进行脚本编写(循环语句 判断语句) sh awk_nginx.log

awk模式概念说明: 匹配的条件信息
  1. 普通的模式:

    ​ a. 正则表达式作为模式

    awk '/^oldboy/{print xx}'

  2. 利用比较匹配信息

    NR==2
    NR>=2
    NR<=2
    NR==2,NR==10
    
  3. 特殊模式

    BEGIN{}  在awk执行命令前做什么事情:
    	[root@oldboyedu ~]# awk 'BEGIN{print "姓","名","QQ号","捐款记录"}{print $0}' awk_test.txt |column -t
        姓     名        QQ号        捐款记录
        Zhang  Dandan    41117397    :250:100:175
        Zhang  Xiaoyu    390320151   :155:90:201
        Meng   Feixue    80042789    :250:60:50
        Wu     Waiwai    70271111    :250:80:75
        Liu    Bingbing  41117483    :250:100:175
        Wang   Xiaoai    3515064655  :50:95:135
        Zi     Gege      1986787350  :250:168:200
        Li     Youjiu    918391635   :175:75:300
        Lao    Nanhai    918391635   :250:100:175
        Lao    Nanhai    918394135   :250:100:175
    	
    	修改内置分隔符变量
    	awk -F ":" '{print $2}' awk_test.txt
    	[root@oldboyedu ~]# awk  'BEGIN{FS=":"}{print $2}' awk_test.txt 
    
    	
    	END{}  在awk执行命令结束之后做的操作
    	[root@oldboyedu ~]# awk 'BEGIN{print "姓","名","QQ号","捐款记录"}{print $0}END{print "操作结束"}' awk_test.txt |column -t 
        姓        名        QQ号        捐款记录
        Zhang     Dandan    41117397    :250:100:175
        Zhang     Xiaoyu    390320151   :155:90:201
        Meng      Feixue    80042789    :250:60:50
        Wu        Waiwai    70271111    :250:80:75
        Liu       Bingbing  41117483    :250:100:175
        Wang      Xiaoai    3515064655  :50:95:135
        Zi        Gege      1986787350  :250:168:200
        Li        Youjiu    918391635   :175:75:300
        Lao       Nanhai    918391635   :250:100:175
        Lao       Nanhai    918394135   :250:100:175
        操作结束
    
        统计累加运算测试:
    	01. 统计/etc/services文件中空行数量
    	利用awk公式进行累加运算
    	[root@oldboyedu ~]# i=0
        [root@oldboyedu ~]# echo $((i=i+1))
        1
        [root@oldboyedu ~]# echo $((i=i+1))
        2
        [root@oldboyedu ~]# echo $((i=i+1))
        3
       
        awk '/^$/' /etc/service
        [root@oldboyedu ~]# awk '/^$/{i=i+1;print i}' /etc/services 
        空行 i=i+1 0+1  i=1
        空行 i=i+1 1+1  i=2
        空行 3
        空行 4
        空行 5
        空行 6
        空行 7
        空行 8
        空行 9
        空行 10
        空行 11
        空行 12
        空行 13
        空行 14
        空行 15
        空行 16
        空行 i=i+1 16+1 i=17 
    	[root@oldboyedu ~]# awk '/^$/{i=i+1}END{print i}' /etc/services 
        17
    
        02. 统计/etc/services文件中有井号开头的行
    	awk '/^#/{i++}END{print i}' /etc/services
    	
    	03. 统计系统中有多少个虚拟用户 普通用户
    	第一个历程: 用户信息都保存在什么文件中了
    	用户信息保存文件: /etc/passwd
    	第二个历程: 从文件中匹配出虚拟用户 普通用户 
    	匹配普通用户
    	awk '$NF~/bash/' /etc/passwd 
    	awk '$NF~//bin/bash/' /etc/passwd 
    	第三个历程: 进行统计
    	普通用户数量
        [root@oldboyedu ~]# awk '$NF~/bash/{i=i+1}END{print i}' /etc/passwd
        63
    	虚拟用户数量
        [root@oldboyedu ~]# awk '$NF!~/bash/{i=i+1}END{print i}' /etc/passwd
        22
    
    	求和运算:
    	sum=sum+$n(需要进行数值求和的列)
    	[root@oldboyedu ~]# seq 10|awk '{sum=sum+$1;print sum}'
        1  sum=sum+$1  0+1 sum=1
        2  sum=sum+$1  1+2 sum=3
        3  sum=sum+$1  3+3 sum=6
        4              6+4 sum=10
        5             10+5 sum=15
        6             15+6 sum=21
        7      28
        8      36
        9      45
        10           45+10 sum=55
    
原文地址:https://www.cnblogs.com/python111/p/14770013.html