我正在从文件中读取一个数字,使用
x= egrep "(^[0-9][0-9])" temp1 但是当我在case语句中使用这些数字时,它总是失败:
case $x in
[0-9])
statements;;
[0-9][0-9]
statements;;
esac当我回显数字时,它看起来很好,我不确定为什么它不工作。
发布于 2009-11-01 04:55:57
bourne / bash case-语句匹配整个字符串,而egrep (在您的示例中)只匹配前导字符。
在您的示例中,您可以将case-statement更改为:
case "$x" in
[0-9][0-9]*)
statements;;
[0-9]*)
statemtns;;
*)
statements for unmatched....
esac请注意,我颠倒了顺序,因为第一个匹配将生效。另外,我引用$x是因为我偏执;)如果$x上可能有您想忽略的前导空格,您可以省略引号。
发布于 2009-11-01 06:08:15
您可以使用egrep的-o选项来确保只获取感兴趣的字符串。
x=$(egrep -o "(^[0-9][0-9])" temp1)
case $x in
[0-9])
statements;;
[0-9][0-9]
statements;;
esac发布于 2009-11-01 07:32:47
awk '/^[0-9][0-9]/'{
#do something
}' temp1或者使用bash
while read -r line
do
case $line in
[0-9][0-9]* ) echo "do something ;;
[0-9]* ) echo "do something";;
* ) echo "do something";;
esac
done <"temp1"https://stackoverflow.com/questions/1655520
复制相似问题