首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Bash egrep编号在情况下不起作用

Bash egrep编号在情况下不起作用
EN

Stack Overflow用户
提问于 2009-11-01 04:25:00
回答 3查看 891关注 0票数 0

我正在从文件中读取一个数字,使用

代码语言:javascript
复制
x= egrep "(^[0-9][0-9])" temp1 

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

代码语言:javascript
复制
case $x in
[0-9])
  statements;;
[0-9][0-9]
  statements;;
esac

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

EN

回答 3

Stack Overflow用户

发布于 2009-11-01 04:55:57

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

在您的示例中,您可以将case-statement更改为:

代码语言:javascript
复制
case "$x" in
[0-9][0-9]*)
  statements;;
[0-9]*)
  statemtns;;
*)
  statements for unmatched....
esac

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

  • Greg
票数 1
EN

Stack Overflow用户

发布于 2009-11-01 06:08:15

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

代码语言:javascript
复制
x=$(egrep -o "(^[0-9][0-9])" temp1)

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

Stack Overflow用户

发布于 2009-11-01 07:32:47

代码语言:javascript
复制
awk '/^[0-9][0-9]/'{
  #do something
}' temp1

或者使用bash

代码语言:javascript
复制
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"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1655520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档