我正在编写一个脚本,用于打印以元音开头并以数字结尾的参数
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
它不起作用;我应该改变什么?
答案 0 :(得分:2)
在bash中没有像省略号(...
)那样的东西。相反,请使用.*
。此外,[0-9]
之后的点表示数字后面有一些内容,这违反了规范。
事实上,当我们进行模式匹配时,不需要运行子shell和grep
:
#! /bin/bash
for x in "$@"; do
if [[ $x == [AEIOUaeiou]*[0-9] ]] ; then
echo "$x"
fi
done
答案 1 :(得分: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