> shell编程 >

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

文章目录
删除文本中指定行的字母
输出一句英文中长度小于6的单词
根据规律计算数字
删除文本中指定行的字母

需求:
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

(责任编辑:IT)