如何逐行读取文件并检查每行是否包含bash中的字符

时间:2013-01-25 17:27:28

标签: bash

我正在尝试使用bash逐行读取文本文件,然后选择要存储在矢量中的特定行。我正在使用的文本文件包含我想使用cURL从服务器下载的文件的名称。我感兴趣的每一行都以一个以#字符开头的描述行开头。我想逐行阅读文件,检查它是否包含#。如果所述行包含#,则跳过它。对于那些不包含#的行,我想使用该信息传递给cURL,这样我就可以自动下载有问题的文件了。到目前为止,我能够通过以下代码逐行阅读。

#! /bin/bash

while read line; do
    echo $line
done <file.txt

我尝试了以下但不起作用。

#! /bin/bash

while read line; do
    if [[ "$line" =~ \#*]]
    then 
        echo $line
    fi
done <file.txt

我收到以下错误。

./script.sh: line 4: syntax error in conditional expression
./script.sh: line 5: syntax error near `then'
./script.sh: line 5: `  then '

我正在使用GNU bash 3.2.48(1)for OS X 10.8.2(x86_64-apple-darwin12)

我已经看到这个问题在其他地方被问到,这是我提出尝试的地方。虽然,由于某种原因它在我的机器上不起作用。

2 个答案:

答案 0 :(得分:3)

grep对此有好处:

grep -v "^#" file | xargs -n1 curl 

答案 1 :(得分:2)

在您的代码中,]]缺失之前的空格。 你的正则表达式匹配任何东西。 (零个或多个#)

#! /bin/bash

while read line; do
    if ! [[ "$line" =~ ^\# ]]
    then 
        echo $line
    fi
done <file.txt