0

我正在编写一个脚本,该脚本打印以元音开头并以数字结尾的参数

Example : ./script Alex1GB0 Bud1GG0 Ethan8DC0 Chad5XZ7d

输出应该是

Alex1GB0 Ethan8DC0 

这是我迄今为止尝试过的

 #!/bin/bash
 for x in $*; do
     o=$(echo $x | grep '\<[AEIOUaeiou]...[0-9].\>')

     if[$? -eq 0]; then
            echo $o
     fi
 done
 exit 0

它不起作用;我应该改变什么?

4

2 回答 2

2

...bash中没有省略号 ( ) 之类的东西。相反,使用.*. 另外,后面的点[0-9]表示数字后面有东西,这违反了规范。

grep事实上,当我们进行模式匹配时,不需要运行 subshel​​l 和:

#! /bin/bash
for x in "$@"; do
    if [[ $x == [AEIOUaeiou]*[0-9] ]] ; then
        echo "$x"
    fi
done
于 2013-01-30T14:50:41.397 回答
1

grep

grep -oP '(?<=\s)[AEIOUaeiou][^ ]*[0-9](?=\s)'

你的例子:

kent$  echo "Example : ./script Alex1GB0 Bud1GG0 Ethan8DC0 Chad5XZ7d"|grep -oP '(?<=\s)[AEIOUaeiou][^ ]*[0-9](?=\s)'
Alex1GB0
Ethan8DC0

awk

awk '{for(i=1;i<=NF;i++)if($i~/^[AEIOUaeiou][^ ]*[0-9]$/)print $i}' file

你的例子:

kent$  echo "Example : ./script Alex1GB0 Bud1GG0 Ethan8DC0 Chad5XZ7d"|awk '{for(i=1;i<=NF;i++)if($i~/^[AEIOUaeiou][^ ]*[0-9]$/)print $i}'
Alex1GB0
Ethan8DC0
于 2013-01-30T14:47:03.433 回答