首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >搜索精确字符串

搜索精确字符串
EN

Stack Overflow用户
提问于 2015-02-13 00:57:11
回答 2查看 75关注 0票数 0

我正在尝试搜索位于4-7号字符中的精确字符串。当我在终端上运行cut命令时,它可以工作,但是在脚本中它失败了,因为我相信if语句会给我提供"0“。这就是我所做的:

代码语言:javascript
运行
复制
for NAME in `cat LISTS_NAME`; do
if [[ John == cut -c 4-7 "${NAME}" ]]; then 
   Do Something ...
fi
if [[ Dana == cut -c 4-7 "${NAME}" ]]; then 
  Do Something... 
fi

你能建议我如何使用cut或任何其他的reg-ex来运行这个吗?

EN

回答 2

Stack Overflow用户

发布于 2015-02-13 01:01:06

你的脚本有很多问题,你不需要cut。这样使用它:

代码语言:javascript
运行
复制
while read -r line; do
   if [[ "${line:3:4}" == "John" ]]; then 
      Do Something ...
   elif [[ "${line:3:4}" == "Dana" ]]; then 
     Do Something... 
   fi
done < LISTS_NAME

在BASH中,"${line:3:3}"cut -c 4-7相同

EDIT:如果你不想要精确的字符串匹配,你可以使用:

代码语言:javascript
运行
复制
while read -r line; do
   if [[ "${line:3}" == "John"* ]]; then 
      Do Something ...
   elif [[ "${line:3}" == "Dana"* ]]; then 
     Do Something... 
   fi
done < LISTS_NAME
票数 1
EN

Stack Overflow用户

发布于 2015-02-13 01:01:59

您并没有在那里运行cut命令。您正在将JohnDana文字字符串 cut -c 4-7 <value-of-$NAME>进行比较。

您需要使用:

代码语言:javascript
运行
复制
if [[ John == $(cut -c 4-7 "${NAME}") ]]; then

等。

也就是说,您应该只执行一次cut调用,并将其存储在一个变量中。为了精确匹配,您需要在==的右侧加上引号,以避免全局匹配。所以

代码语言:javascript
运行
复制
substr=$(cut -c 4-7 "${NAME}")
if [[ John == "$substr" ]]; then

然后,为了避免需要重复的if ...; then行,您可以使用case语句做得更好:

代码语言:javascript
运行
复制
substr=$(cut -c 4-7 "${NAME}")
case $substr in
    John)
         Do something
    ;;
    Dana)
         Do something else
    ;;
esac
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28483305

复制
相关文章

相似问题

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