代码因SED中的stdin而失败

时间:2018-03-25 13:00:50

标签: sed pattern-matching

我有一个bash脚本,它找到具有特定扩展名的文件,然后将这些文件传递给一个函数,该函数检查文件中的每一行是否只包含导入库的文件。例如:

function testing() {
while IFS='' read -r line; do
    if [[ "$line" =~ .*log\" ]]; then
        echo "log is imported in the file" $1
        break
    else
        echo "log is not imported in the file" $1
        break
    fi
done < <(sed -n '/import (/,/)/p' "$1")
}

function main() {
for file in $(find "$1" -name "*.go"); do
    if [[ $file == *test.go ]]; then
        :
    else 
        var1=$(testing $file)
        echo "$var1"

    fi
done;
}

main $1

问题是脚本在testing函数中没有else块的情况下工作,但是在testing函数中引入了else块,它只是默认回显log is not imported in the file blah即使某些文件中使用log

关于问题的任何想法?

感谢。

以下是输入文件示例:

package main                                                           

import (
    "fmt"
    "io/ioutil"
    logger "log"
    "net/http"                                                           
)                                                                        
type webPage struct {
    url  string
    body []byte
    err  error                                                              
}                                                                         
...

如果导入log,输出基本上是回显。

1 个答案:

答案 0 :(得分:0)

您需要重写testing函数的逻辑,因为它只会测试文件的第一行。实际上,if [[ "$line" =~ .*log\" ]]的每个分支都有一个break语句,因此在实践中,只要读取第一行,就会到达break