zoukankan      html  css  js  c++  java
  • 第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”替换为空

  • 相关阅读:
    正则表达式(常用正则总结)
    What is maven?
    二维数组的遍历使用foreach
    Installing Git
    Hive修改表名,列名,列注释,表注释,增加列,调整列顺序,属性名等操作
    有趣的开源项目集结完毕,HelloGitHub 月刊第 63 期发布啦!
    - zxvf
    tensorflow入门
    Postman v8.7.0
    springboot等javaweb项目将jar包安装(打包)到本地Maven仓库
  • 原文地址:https://www.cnblogs.com/5iedu/p/6241652.html
Copyright © 2011-2022 走看看