搜索确切的字符串

时间:2015-02-12 16:57:11

标签: bash

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

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或任何其他注册表来运行此操作吗?

2 个答案:

答案 0 :(得分:1)

您的脚本存在许多问题,您不需要cut。以这种方式使用它:

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

相同

编辑:如果您不想要精确的字符串匹配,那么您可以使用:

while read -r line; do
   if [[ "${line:3}" == "John"* ]]; then 
      Do Something ...
   elif [[ "${line:3}" == "Dana"* ]]; then 
     Do Something... 
   fi
done < LISTS_NAME

答案 1 :(得分:1)

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

您需要使用:

if [[ John == $(cut -c 4-7 "${NAME}") ]]; then

据说你应该只进行一次切割调用并将其存储在一个变量中。为了精确匹配,您需要引用==的右侧以避免全局变形。所以

substr=$(cut -c 4-7 "${NAME}")
if [[ John == "$substr" ]]; then

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

substr=$(cut -c 4-7 "${NAME}")
case $substr in
    John)
         Do something
    ;;
    Dana)
         Do something else
    ;;
esac