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実際、パターン マッチングがある場合、サブシェルを実行する必要はありません。

#! /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 '{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 に答える