05_Shell 编程_字符截取和处理命令

字符截取命令

1. cut 命令

1.1 cut 命令介绍

cut [选项] 文件名
选项:
	-f 列号:	提取第几列
	-d 分隔符:	按照指定分隔符分割列

案例1:

vi student.txt
ID	Name	gender 		Mark
1	Liming		M		86
2	SC			M		90
3	Gao			M		83

制表符

提取第二列
cut -f 2 student.txt

提取第二、三列
cut -f 2,3 student.txt

cut -d ":" -f 1,3 student.txt

案例2:

提取出新的用户,排除root用户

cat /etc/passwd | grep /bin/bash | grep -v root | cut -d ":" -f 1

1.2 cut 命令局限

df -h | grep "sda5" | cut -f 5

无法提取出sda5这一行的第5列,因为空格不是制表符。

2. printf 命令

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键

案例:

printf %s 1 2 3 4 5 6
> 123456

printf %s %s %s 1 2 3 4 5 6
>%s%s123456

printf '%s %s %s' 1 2 3 4 5 6
> 1 2 34 5 6

printf '%s %s %s\n' 1 2 3 4 5 6
> 1 2 3
> 4 5 6

打印文件内容

printf '%s' $(cat student.txt)

调整输出格式
printf '%s\t %s\t %s\t %s\t %s\t %s\n' $(cat student.txt)

在 awk 命令的输出中支持print和printf命令。

  • print:print会在每个输出之后自动加入一个换行符(Linux默认没有print命令)
  • printf:printf是标准格式输出命令,并不会自动加入换行符,如果需要换行,需要手工加入换行符。

3. awk 命令

# awk '条件1{动作1}条件2{动作2}...'

条件(Pattern):
	一般使用关系表达式作为条件
	x>10	判断变量 x 是否大于10
	x>=10	大于等于
	x<=10	小于等于

动作(Action):
	格式化输出
	流程控制语句

案例:

文档是一个成绩表,ID Sname PHP Java C Average

没有设条件, 打印第二列和第六列
# awk '{printf $2 "\t" $6 "\n"}' student.txt

# df -h | awk '{print $1 "\t" $3}'

在awk中 print 和 printf 都可以使用,print会自动加入换行符。

3.1 BEGIN

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

在动作之前先BEGIN之后的动作。

3.2 FS 内置变量

FS 分隔符
读取第一条数据之前,第一条数据分割。

cat /etc/passwd | grep "/bin/bash" | \
awk 'BEGIN {FS=":"}{printf $1 "\t" $3 "\n"}'

3.3 END

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

3.4 关系运算符

# cat student.txt | grep -v Name | \
awk '$6>=87 {printf $2 "\n" }'

4. sed 命令

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

vim只能修改文件。不可以把命令的结果进行修改。

sed不光可以修改文件,可以用管道符进行接收,直接修改命令的结果。

sed [选项] '[动作]' 文件名

选项:
	-n:一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过sed命令处理的行输出到屏幕。
	-e:允许对输入数据应用多条sed命令编辑
	-i:用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出。

动作:
	a\:	追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾需要用“\”代表数据未完结。
	c\:	行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾需要用“\”代表数据未完结。
	i\:	插入,在当前行前面插入一行或多行。“\"代表数据未完结。
	d:	删除,删除指定的行。
	p:	打印,输出指定的行。
	s:	字符替换,用一个字符串替换另外一个字符串。格式为”行范围s/旧字符/新字串/g“(和vim中的替换格式类似)

行数据操作

sed '2p' student.txt 
查看文件的第二行,并输出全部行

sed -n '2p' student.txt
只输出第二行

sed '2,4d' student.txt
删除第二行到第四行的数据,但不能修改文件本身

sed '2i hello \ world' student.txt
在第二行前插入两行数据

sed '2c No such person' student.txt
替换第二行数据
df -h | sed -n '2p'

字符串替换

sed 's/旧字符穿/新字串/g' 文件名

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

sed -i '3s/74/99/g' student.txt
sed操作的数据直接写入文件

sed -e 's/Liming//g;s/Gao//g' student.txt
同时把‘Liming”和“Gao”替换为空。

字符处理命令

1. 排序命令sort

sort [选项] 文件名

选项:
	-f: 忽略大小写
	-n: 以数值型进行排序,默认使用字符串型排序
	-r: 反向排序
	-t: 指定分隔符,默认分隔符是制表符
	-k n[,m]: 按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)

案例:

sort /etc/passwd
排序用户信息文件

sort -r /etc/passwd
反向排序

sort -t ": -k 3,3 /etc/passwd
指定分隔符是“:”,用第三字段开头,第三字段结尾排序。就是用第三字段排序。

sort -n -t ":" -k 3,3 /etc/passwd

2. 统计命令

wc [选项] 文件名
选项:
	-l: 只统计行数
	-w: 只统计单词数
	-m: 只统计字符数
wc /etc/passwd
wc -l /etc/passwd
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值