egrep不会在while循环中给出结果,但是单独工作

时间:2018-05-07 02:32:16

标签: shell unix scripting ksh

我正在尝试在回显一行(示例[abc_testing_12345])之后grep一个正则表达式模式(“^ [\ w + [0-9] {5,6}] $”)。 当我通过定义两个变量,输入和模式在命令行上执行它时它工作正常。 但是当我在while循环中使用相同的东西并从文件中获取输入值时,它不起作用。

我在互联网上看过多个帖子并尝试使用这些选项,但它没有用。

示例工作代码:

    pattern="^\[\w+[0-9]{5,6}\]$"
    input="[abc_testing_12345]"
    echo "$input" | egrep -c "$pattern

这打印值1

但是当我从文件填充'input'变量然后尝试grep时,它不会打印值1

示例代码:

pattern="^\[\w+[0-9]{5,6}\]$"
cat inputFile | grep "\[" | while read line
do
echo "$line" | egrep -c "$pattern"
done

此代码的结果为0

请帮我解决这个问题。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我无法重现你的问题。只要1包含与inputfile匹配的行,您提供的脚本就会返回$pattern,如:

[abc_testing_12345]

但我建议将while循环重写为:

while read line                                                          
do                                                                          
    echo "$line" | grep -c "$pattern"                                      
done <<< $(grep "\[" inputfile)     

甚至可以避免使用while循环:

grep -c "$pattern" inputfile