第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 |
输出警告声音 |
|
\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)_字符截取命令的更多相关文章
- 第10章 Shell编程(3)_字符处理命令和条件判断
3. 字符处理命令 3.1 排序命令:sort (1)sort命令:#sort [选项] 文件名 选项 作用 -f 忽略大小写 -n 以数值型进行排序,默认使用字符串型排序 -r 反向排序 -t 指定 ...
- 第10章 Shell编程(1)_正则表达式
1. 基础的正则表达式 1.1 正则表达式与通配符 (1)正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配.grep.awk.sed等命令可以支持正则表达式. (2)通配符用来匹配符合条件的 ...
- 第10章 Shell编程(4)_流程控制
5. 流程控制 5.1 if语句 (1)格式: 格式1 格式2 多分支if if [ 条件判断式 ];then #程序 else #程序 fi if [ 条件判断式 ] then #程序 else # ...
- Linux命令集锦之·字符截取命令
时间:2018-11-15 记录:byzqy 字符截取命令: cut.printf.awk.sed cut $ cut [选项] 文件名 选项: -f 列号:提取第几列: -d 分隔符:按照指定分隔符 ...
- 10、shell编程+流程控制+分支嵌套
SHELL 编程 shell 是一个命令解释器,侦听用户指令.启动这些指令.将结果返回给用户(交互式的shell) shell 也是一种简单的程序设计语言.利用它可以编写一些系统脚本. ...
- linux 10 -Bash Shell编程
二十三. Bash Shell编程: 1. 读取用户变量: read命令是用于从终端或者文件中读取输入的内建命令,read命令读取整行输入,每行末尾的换行符不被读入.在read命令后 ...
- shell编程:定义简单标准命令集
shell是用户操作接口的意思,操作系统运行起来后都会给用户提供一个操作界面,这个界面就叫shell,用户可以通过shell来调用操作系统内部的复杂实现,而shell编程就是在shell层次上进行编程 ...
- shell编程必须要掌握的命令-xargs
一,说xargs命令前,说一下什么是shell编程 什么是shell编程呢,说白了就是按一定的规则把各种命令组织起来,完成一定的事情.纯属个人理解,哈哈.不管是交互式的shell,还是非交互的shel ...
- Shell系列(23)- 字符截取命令sed
简述 字符替换命令sed 和vi功能相似,但是vi是给用户用的,sed是给脚本用的 sed是一种几乎包括在所有的UNIX平台(包括Linux)的轻量级流编辑器.s sed主要是用来将数据进行选取.替换 ...
随机推荐
- socket编程为什么需要htons(), ntohl(), ntohs(),htons() 函数
在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题.这是就可能用到htons(), ntohl(), ntohs(),htons()这4个函数. 网络字节顺序与本地字节顺序之间的转 ...
- 如何修复VUM在客户端启用之后报数据库连接失败的问题
在上一篇随笔中介绍了关于重新注册VMware Update Manager(VUM)至vCenter Server中的方法,最近有朋友反应,原本切换过去好好的更新服务为什么某次使用一下就不灵了? 当时 ...
- (福利)分享一个用android编写的简单的APP——爱吖天气
这是本人随便编写的一个天气的APP,超级简单. 项目已同步至:https://github.com/nanchen2251/AiYaWeatherDemo 基本实现了天气查看,闪屏引导,天气基本信息, ...
- 扩展方法(C#)
扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用. 下面的示例为String添加 ...
- C++进程间通信
# C++进程间通信 # 进程间通讯的四种方式:剪贴板.匿名管道.命名管道和邮槽 ## 剪切板 ## //设置剪切板内容 CString str; this->GetDlgItemText(ID ...
- ABP学习日记1
- 使用BitArray判断素数
首先显示1024范围内的所有素数,然后显示输入的数是否是素数.1024 是代码中计算的素数的范围,可以修改.计算平方根,是为了确定一个基数的范围.1024的平方根是32,两个超过32 的数相乘,肯定大 ...
- 自己动手写计算器v1.0
今天突发奇想,想着看了还几个设计模式了,倒不如写点东西来实践它们.发现计算器这种就比较合适,打算随着设计模式的学习,会对计算器不断的做改进. 包括功能的增加和算法的改进.初学者难免犯错,希望大家不吝指 ...
- Java注解
Java注解其实是代码里的特殊标记,使用其他工具可以对其进行处理.注解是一种元数据,起到了描述.配置的作用,生成文档,所有的注解都隐式地扩展自java.lang.annotation.Annotati ...
- js通过循环多张图片实现动画效果
以小鱼摇尾巴和眨眼睛为例 动画思路: 1.将图片资源放在数组里面 2.通过计时器来设定间隔时间 3.通过计数器来取相应的图片 第一步:基本框架,鱼身体 <body> <canvas ...