shell脚本:删除文本中的字母、找单词、算数字

本文介绍如何使用Shell脚本处理文本,包括删除指定行的字母,找出英文句子中长度小于6的单词,以及根据数字序列规律计算后续数字。详细解释了脚本思路和执行结果。

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

删除文本中指定行的字母

需求:
1.将文本test.txt(共10行)中前5行中包含字母的行删除
2.将6-10行中的字母删除

脚本思路:
过滤出前5行,将包含字母的行删除,输出满足需求1的结果,去掉前5行,将剩余的行中(6-10行)的字母去掉,输出满足需求2的结果

#!/bin/bash
#过滤前5行,删除包含字母的行
sed -n '1,5'p test.txt |sed '/[a-zA-Z]/d'
#删除前5行,将剩余行(6-10行)中的字母去掉
sed '1,5'd test.txt |sed 's/[a-zA-Z]//g'

输出一句英文中长度小于6的单词

需求:
计算一句英文中所有单词的长度,输出长度小于6的单词

示例:
include all files from the config-test directory.

脚本思路:
通过awk -F参数指定分隔符(空格、横杠、点)分割出每个单词,切割后一共有9段(最后的点作为分隔符的情况下,这句话会和结尾隐藏的结束符$被分隔开,所以8个单词+1个结束符一共9段),循环遍历前8段,并计算长度,删除长度小于6的单词

#!/bin/bash
n="include all files from the config-test directory."
#计算分隔后的段数
s=`echo $n|awk -F '[ +-.]' '{print NF}'`
#循环计算前8段的长度
for ((i=1;i<$s;i++))
do
	l=`echo $n|awk -F '[ +-.]' -v j=$i '{print $j}'|wc -L`
	#输出每段长度小于6的单词
	if [ $l -lt 6 ]
	then
		echo $n|awk -F '[ +-.]' -v j=$i '{print $j}'
	fi
done

注意:awk打印指定的段需要使用$符号,但是在脚本中print不能直接打印变量i,因为要打印的话写法为{ print $$i},这样会出错,所以先把$i的值传给变量j,print直接打印$j即可打印指定的段

执行结果:

[root@linux shell]# sh test.sh 
all
files
from
the
test

根据规律计算数字

需求:
有一组数字:10、31、53、77、105、141,找到规律使用shell脚本输出后面10个数字

脚本思路:

前一位数与后一位数的差值:
31-10=21
53-31=22
77-53=24
105-77=28
141-105=36

差值每次递增1,2,4,8(2的0,1,2,3次方)

用x表示数字:10、31、53、77、105、141
用y表示x的差值:21、22、24、28、36
用z表示y的差值:1、2、4、8

#!/bin/bash
x=10
y=21
for i in `seq 0 15`
do
	echo $x
	x=$[$x+$y]
	z=$[2**$i]
	y=$[$y+$z]
done

执行结果:

[root@linux shell]# sh test.sh 
10
31
53
77
105
141
193
277
425
701
1233
2277
4345
8461
16673
33077
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值