Bash egrep数字不起作用

时间:2009-10-31 20:25:00

标签: bash

我正在使用

从文件中读取数字
x= egrep "(^[0-9][0-9])" temp1 

但是当我在case语句中使用这些数字时,它总是会失败:

case $x in
[0-9])
  statements;;
[0-9][0-9]
  statements;;
esac

当我回复它看起来很好的数字时,我不确定它为什么不起作用。

3 个答案:

答案 0 :(得分:1)

bourne / bash case-statement匹配整个字符串,而egrep(在您的示例中)仅匹配前导字符。

在您的示例中,您将case语句更改为:

case "$x" in
[0-9][0-9]*)
  statements;;
[0-9]*)
  statemtns;;
*)
  statements for unmatched....
esac

请注意,我颠倒了顺序,因为第一场比赛将生效。另外,我引用$ x因为我是偏执狂;)如果它可能有你想要忽略的前导空格,你可以省略$ x上的引号。

  • 格雷格

答案 1 :(得分:0)

等号后面的空格没有进程替换使x为空。这可能就是您case无效的原因。

您可以使用-o选项egrep来确保只获得您感兴趣的字符串。

x=$(egrep -o "(^[0-9][0-9])" temp1)

case $x in
[0-9])
  statements;;
[0-9][0-9]
  statements;;
esac

答案 2 :(得分:0)

取决于你想做什么,你可以用awk

来做
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"