Linux脚本练习之script077-打印只有一个数字的行

Posted 二木成林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux脚本练习之script077-打印只有一个数字的行相关的知识,希望对你有一定的参考价值。

script077

题目

注:题目来源于 SHELL20 打印只有一个数字的行

假设我们有一个 nowcoder.txt,现在需要你写脚本,打印只有一个数字的行。假设 nowcoder.txt 内容如下

haha
1
2ab
cd
77

那么你的脚本应该输出:

1
2ab

脚本一

将每行的每个字符单独一行显示,然后使用 grep -E 命令检索只有数字的行,并统计出现次数,并且用 if 语句筛选出现次数为 1 的行。

#!/bin/bash

while read line; do
  num=$(echo -n $line | sed 's/\\w/&\\n/g' | grep -E -c "[0-9]")
  if [ $num -eq 1 ]; then
      echo $line
  fi
done < nowcoder.txt

脚本二

使用 awk 命令,通过正则表达式进行分隔。

awk -F "[0-9]" 'if(NF==2) print $0' nowcoder.txt

脚本三

将每行的非数字使用 sed 命令替换为空,那么剩下的要么是空字符串,要么是数字字符串,然后统计行文本的字符个数,如果字符个数为 1 个则表示该行是只有一个数字的行。

#!/bin/bash

while read line; do
    out=$(echo $line | sed 's/[^0-9]//g')

    if [ $#out -eq 1 ]; then
        echo $line 
    fi
done < nowcoder.txt

脚本四

通过 grep 命令直接使用正则表达式进行匹配数字只出现一次的行。

grep -E '^[a-Z]*[0-9][a-Z]*$' nowcoder.txt

脚本五

通过 awk 命令直接使用正则表达式进行匹配数字只出现一次的行。

awk '/^[[:alpha:]]*[[:digit:]][[:alpha:]]*$/print' nowcoder.txt

以上是关于Linux脚本练习之script077-打印只有一个数字的行的主要内容,如果未能解决你的问题,请参考以下文章

Linux脚本练习之script076-打印等腰三角形

Linux脚本练习之script076-打印等腰三角形

Linux脚本练习之script065-打印字母数小于8的单词

Linux脚本练习之script060-打印文件的最后5行

Linux脚本练习之script037-打印无密码用户。

Linux脚本练习之script006-编写一个脚本,打印任何数的乘法表。