• 第10章 Shell编程(2)_字符截取命令


    2. 字符截取命令

    2.1 cut字段提取命令(grep提取行,cut提取列

    (1)cut命令:#cut [选项] 文件名

      选项: -f 列号:提取第几列;

          -d 分隔符:按照指定分隔符分割列,默认是制表符分隔

    (2)应用举例

      //测试文件(student.txt)

    ID	Name		gender		PHP		Linux		MySQL		Average
    1	ZS		M		82		95		86		87.66
    2	LS		F		74		96		87		85.66		
    3	WW		M		99		83		93		91.66

      ①#cut –f 2 student.txt  //提取第2列

      ②#cut –f 2,3 student.txt //提取第2、3列

      ③#cut –d ":" –f 1,3 /etc/password //用“:”分隔各列,提取第1、3列。

      ④批量删除普通用户:

        # cat /etc/passwd | grep /bin/bash | grep -v root | cut -d ":" -f 1 (注意,只有root和普通用户登录时才会执行/bin/bash脚本。grep –v root去除掉root用户,这时只剩普通用户,再通过cut提取出用户名)

    (3)cut命令的局限如果以空格分隔,则会遇到计算空格不便的问题(如,#df –h显示的信息是以空格分隔的,可使用awk命令解决)

    2.2 printf命令

    (1)格式化输出命令:printf '输出类型输出格式' 输出内容

    输出类型

    说明

    %ns

    输出字符串。n是数字指代输出几个字符

    %ni

    输出整数。n是数字指代输出几个数字

    %m.nf

    输出浮点数。m和n是数字,指代输出的整数位数和小数位数。如%8.2f代表共输出8位数,其中2位小数,6位是整数。

    输出格式

    说明

    a

    输出警告声音

    

    输出退格键,也就是Backspace键

    f

    清除屏幕

    换行

    回车,也就是Enter键

    水平Tab键

    v

    垂直Tab键

    (2)应用举例

      ①#printf '%s %s %s'  1 2 3 4 5 6 //分为两组“1 2 3”,“4 5 6”,然后输出

      ②#printf '%s %s %s '  1 2 3 4 5 6 //分为两组“1 2 3”,“4 5 6”,并换行输出

      ③#printf '%s' $(cat student.txt) //用cat系统命令查询student.txt的内容,并用printf显示出来。

      ④#printf '%s %s %s %s %s %s ' $(cat student.txt) //带格式化输出

    (3)在awk命令的输出中支持print和printf命令

      ①print: 会在每个输出之后自动加入一个换行符(Linux默认没有print命令,但awk命令自带一个print命令)

      ②printf:是标准格式输出命令,并不会自动加入换行符,如果需要换行,需要手工加入换行符。

    2.3 awk命令

    (1)awk命令简介

      ①awk是三个人名的缩写,他们是:Aho、(Peter)Weinberg和(Brain)Kernighan。正是这三个人创造了awk---一个优秀的样式扫描与处理工具。

      ②awk的功能是什么?与sed和grep很相似,awk是一种样式扫描与处理工具。但其功能却大大强于sed和grep。awk提供了极其强大的功能:它几乎可以完成grep和sed所能完成的全部工作,同时,它还可以可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。实际上,awk的确拥有自己的语言:awk程序设计语言,awk的三位创建者已将它正式定义为:样式扫描和处理语言。

    (2)命令格式:#awk '条件1{动作1} 条件2{动作2}…' 文件名

    条件(Pattern)

    说明

    动作(action)

    x>10

    判断变量x是否大于10

    格式化输出

    x>=10

    大于等于10

    流程控制语句

    ▲一般使用关系表达式作为条件

    【编程实验】awk命令

      ①#awk '{printf $2 " " $7 " "}' student.txt //显示student.txt第2、7列并以Tab键格式化输出

        Name    Average

        ZS      87.66

        LS      85.66

        WW      91.66

      ②# df -h | awk '{print $1 " " $5 " " $6}'  //显示磁盘信息

        Filesystem      Use%    Mounted

        /dev/sda5       8%      /

        tmpfs   0%      /dev/shm

        /dev/sda1       16%     /boot

        /dev/sda2       1%      /home

        /dev/sdb1       1%      /disk1

        /dev/sdb5       1%      /disk5

      ③提取磁盘使用率

     

    (3)BEGIN:在所有的命令执行之前,执行BEGIN后面的语句

      ①先显示提示信息,再显示命令结果

      # awk 'BEGIN{printf "This is a transcript "}{printf $2 " " $6 " "}' student.txt

        This is a transcript

        Name    MySQL

        ZS      86

        LS      87

        WW      93

      ②以“:”为分隔符提取/etc/passwd的第1和第3字段

      #awk 'BEGIN{FS=":"}{print $1 " " $3}' /etc/passwd

    (4)END:在所有命令执行之后,执行END后面的语句

      ①# awk 'END{printf "The End "}{printf $2 " " $7 " "}' student.txt

    (5)FS内置变量:分隔符

     

    (6)关系运算符:# cat student.txt | grep -v Name | awk '$7 >=87{printf $2 " "}'

     

    2.4 sed命令

    (1)sed命令简介

      sed是一种几乎包括在所有UNIX平台(包括Linux)的轻量级流编辑器。sed主要是用来将数据进行选择、替换、删除、新增的命令。

    (2)sed命令:#sed [选项] '[动作]' 文件名

    选项

    说明

    -n

    一般sed命令会把所有数据都输出到屏幕,如果加入此项,则只会经过sed命令处理的行输出到屏幕。

    -e

    允许对输入数据应用多条sed命令编辑

    -i

    用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出。即修改结果会被写入文件。

    动作

    说明

    a

    追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾需要用“”代表数据未完结。

    c

    行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾需用“”代表数据未完结

    i

    插入,在当前行前插入一行或多行。插入多行时,除最后一行外,每行末尾需要用“”代表数据未完结。

    d

    删除,删除指定行

    p

    打印,输出指定的行

    s

    字串替换,用一个字符串替换另外一个字符串。格式为“行范围s/旧字符串/新字串/g”(和vim中的替换格式类似)

    (3)行数据操作

      ①# sed -n '2p' student.txt //查看文件的第2行。注意,如果不加-n,除了显示第2行外,还会将原文件输出一遍

      ②# sed '2,4d' student.txt  //删除第2到第4行数据,但不影响文件本身

      ③# sed '2a hello' student.txt //在第2行后追加hello

      ④# sed '2i hello world' student.txt //在第2行前插入hello world

      ⑤# sed '2i hello          //在第2行前插入两行:hello和world

        world' student.txt

      ⑥# sed '2c No such person' student.txt //将第2行数据替换为指定文本。

    (4)字符串替换:#sed 's/旧字串/新字串/g' 文件名

      ①# sed '3s/74/99/g' student.txt  //在第3行中,把74换成99

      ②# sed -i '3s/74/99/g' student.txt  //sed操作的数据直接写入文件,不显示在屏幕上。

      ③# sed -e 's/ZS//g;s/LS//g' student.txt //同时把“ZS”和“LS”替换为空

  • 相关阅读:
    adb常用命令
    视频WEB插件 V1.5.2 (海康威视)
    字体渐变 兼容 ie
    spring mvc问题:源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示
    APIO 2022 游记
    Aspen丶Sun
    解决 Linux下ifconfig命令没有ens33信息
    Hadoop Writable和WritableComparable区别
    函数的二义性
    C++显式类型转换
  • 原文地址:https://www.cnblogs.com/5iedu/p/6241652.html
Copyright © 2020-2023  润新知