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

输出警告声音

\b

输出退格键,也就是Backspace键

\f

清除屏幕

\n

换行

\r

回车,也就是Enter键

\t

水平Tab键

\v

垂直Tab键

(2)应用举例

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

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

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

  ④#printf '%s\t%s\t%s\t%s\t%s\t%s\t\n' $(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 "\t" $7 "\n"}' student.txt //显示student.txt第2、7列并以Tab键格式化输出

    Name    Average

    ZS      87.66

    LS      85.66

    WW      91.66

  ②# df -h | awk '{print $1 "\t" $5 "\t" $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\n"}{printf $2 "\t" $6 "\n"}' student.txt

    This is a transcript

    Name    MySQL

    ZS      86

    LS      87

    WW      93

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

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

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

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

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

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

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”替换为空

第10章 Shell编程(2)_字符截取命令的更多相关文章

  1. 第10章 Shell编程(3)_字符处理命令和条件判断

    3. 字符处理命令 3.1 排序命令:sort (1)sort命令:#sort [选项] 文件名 选项 作用 -f 忽略大小写 -n 以数值型进行排序,默认使用字符串型排序 -r 反向排序 -t 指定 ...

  2. 第10章 Shell编程(1)_正则表达式

    1. 基础的正则表达式 1.1 正则表达式与通配符 (1)正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配.grep.awk.sed等命令可以支持正则表达式. (2)通配符用来匹配符合条件的 ...

  3. 第10章 Shell编程(4)_流程控制

    5. 流程控制 5.1 if语句 (1)格式: 格式1 格式2 多分支if if [ 条件判断式 ];then #程序 else #程序 fi if [ 条件判断式 ] then #程序 else # ...

  4. Linux命令集锦之·字符截取命令

    时间:2018-11-15 记录:byzqy 字符截取命令: cut.printf.awk.sed cut $ cut [选项] 文件名 选项: -f 列号:提取第几列: -d 分隔符:按照指定分隔符 ...

  5. 10、shell编程+流程控制+分支嵌套

    SHELL 编程     shell 是一个命令解释器,侦听用户指令.启动这些指令.将结果返回给用户(交互式的shell)     shell 也是一种简单的程序设计语言.利用它可以编写一些系统脚本. ...

  6. linux 10 -Bash Shell编程

    二十三. Bash Shell编程:     1.  读取用户变量:     read命令是用于从终端或者文件中读取输入的内建命令,read命令读取整行输入,每行末尾的换行符不被读入.在read命令后 ...

  7. shell编程:定义简单标准命令集

    shell是用户操作接口的意思,操作系统运行起来后都会给用户提供一个操作界面,这个界面就叫shell,用户可以通过shell来调用操作系统内部的复杂实现,而shell编程就是在shell层次上进行编程 ...

  8. shell编程必须要掌握的命令-xargs

    一,说xargs命令前,说一下什么是shell编程 什么是shell编程呢,说白了就是按一定的规则把各种命令组织起来,完成一定的事情.纯属个人理解,哈哈.不管是交互式的shell,还是非交互的shel ...

  9. Shell系列(23)- 字符截取命令sed

    简述 字符替换命令sed 和vi功能相似,但是vi是给用户用的,sed是给脚本用的 sed是一种几乎包括在所有的UNIX平台(包括Linux)的轻量级流编辑器.s sed主要是用来将数据进行选取.替换 ...

随机推荐

  1. 前端学HTTP之网络基础

    × 目录 [1]网络 [2]OSI [3]TCP/IP 前面的话 HTTP协议对于前端工程师是非常重要的.我们在浏览网站时,访问的每一个WEB页面都需要使用HTTP协议实现.如果不了解HTTP协议,就 ...

  2. 初步认识Node 之Node为何物

    很多人即便是在使用了Node之后也不知道它到底是什么,阅读完本文你应该会有一个初步的.具体的概念了.    Node的目标 提供一种简单的构建可伸缩网络程序的方法.那么,什么是可伸缩网络程序呢?可伸缩 ...

  3. Java:泛型基础

    泛型 引入泛型 传统编写的限制: 在Java中一般的类和方法,只能使用具体的类型,要么是基本数据类型,要么是自定义类型.如果要编写可以应用于多种类型的代码,这种刻板的限制就会束缚很多! 解决这种限制的 ...

  4. 你真的会玩SQL吗?和平大使 内连接、外连接

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  5. 使用webfont为easyui扩充图标

    目前回到pc端开发,开始用了easyui这个框架.重拾easyui后感觉这个框架用的很多技术太古老,页面风格也太控件化.单从图标一项来说吧,这种花花绿绿的图标用户一看都傻了眼,同时整个框架就提供了那么 ...

  6. GitHub更新自己Fork的项目

    转自:http://www.tuicool.com/articles/MzMJre github上有个功能叫fork,可以将别人的工程复制到自己账号下.这个功能很方便,但其有一个缺点是:当源项目更新后 ...

  7. centos7查看系统版本,查看机器位数x86-64

    前言 由于不经常使用linux,每当使用的时候就是安装软件,安装软件的时候就要选择安装包平台,是32位的还是64位的.这时候突然发现不知道怎么查,于是百度.虽然轻而易举百度出来,但仍旧没有自己的笔记看 ...

  8. 图标字体 VS 雪碧图——图标字体应用实践

    本文介绍使用图标字体和SVG取代雪碧图的方法.雪碧图是很多网站经常用到的一种技术,但是它有缺点:高清屏会模糊.无法动态变化如hover时候反色.而使用图标字体可以完美解决上述问题,同时具备兼容性好,生 ...

  9. Python 历遍目录

    Automate the Boring Stuff 学习笔记 01 使用 os 模块的 walk() 函数可以实现历遍目录的操作,该函数接收一个绝对路径字符串作为必选参数,返回三个参数: 当前目录—— ...

  10. Java第三方数据库连接池库-DBCP-C3P0-Tomcat内置连接池

    连接池原理 数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”.预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去.我们可以通过设定连接池 ...