文章目录 删除文本中指定行的字母 输出一句英文中长度小于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) |