Shell 字符截取命令cut printf awk sed

本文介绍了Shell中的字符截取命令cut、printf、awk和sed的使用方法。cut用于按指定分隔符和列数进行数据提取;printf支持自定义输出格式,包括字符串、整数和浮点数;awk擅长处理以空格为分隔的数据,并能通过条件判断执行不同操作;sed则提供行级别的编辑功能,包括追加、插入、删除和替换等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.cut

cut -d "指定分隔符" -f 指定列数  文件名

默认分隔符为Tab键

cut -f 2 student.txt

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

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

printf "%s %s %s\n"  1 2 3 4 5 6

通过指定格式输出

3.awk

当以空格为分隔符时 cut就无法准确识别,这时候就需要使用awk

awk ‘条件1{动作1} 条件2{动作2}…’ 文件名

$数字代表第几列 如 $2 第二列

df -h | grep centos-root | awk '{printf $5 "\n"}'

printf不会自动换行,可使用print自动换行

BEGIN:强制后面的命令第一个执行

END:强制后面的命令最后执行

awk 'BEGIN{print "这是一个测试"} {print $1 $3} END{print "测试结束"}' student.txt

FS:分隔符

cat /etc/passwd | grep /bin/bash | awk 'BEGIN{FS = ":"} {print $1}'

4.sed

sed [选项] ‘[动作]’ 文件名

选项:

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

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

-i: 用sed的修改结果直接修改读取数据的文件, 而不是由屏幕输出

动作:

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

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

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

d: 删除,删除指定的行。

p:打印,输出指定的行。

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

打印:sed "2p" student.txt

发现第二行显示了俩次,加入-n,只输出第二行

sed  -n "2p" student.txt

删除:sed "2,4d" student.txt

追加:sed "2a error!" student.txt

插入:sed "2i error! " student.txt

替换:sed "s/Tjn/Cyf/g" student.txt

行替换:sed "2c error! " student.txt

应用多条sed语句编辑:sed -e 's/Tjn//g ; s/Tjt//g' student.txt

直接修改文本内容,而不是打印在屏幕上:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值