【问题标题】:Read file line by line with bash script使用 bash 脚本逐行读取文件
【发布时间】:2014-02-19 20:30:40
【问题描述】:

我需要一个 bash 脚本来逐行读取文件。如果正则表达式匹配,则回显此行。

脚本如下:

#!/bin/bash

echo "Start!"

for line in $(cat results)
do
   regex = '^[0-9]+/[0-9]+/[0-9]+$'
   if [[ $line =~ $regex ]]
   then
      echo $line
   fi
done

它正在打印文件内容,但显示此警告:

./script: line 7: regex: command not found

哪里出错了?

【问题讨论】:

  • 您发布的内容可以替换为grep '^[0-9]+/[0-9]+/[0-9]+$' results
  • 主题不反映内容。这不是关于逐行读取文件的问题,而是关于 bash 赋值语法的问题。

标签: regex bash if-statement command


【解决方案1】:

其他人已经为您提供了有关要使用的实际正则表达式的提示。 循环遍历文件中所有行的正确方法是:

#!/bin/bash

regex='[0-9]'

while read line
do
    if [[ $line =~ $regex ]]
    then
        echo $line
    fi
done < input

【讨论】:

    【解决方案2】:

    在这种情况下的问题是= 周围的空格登录regex = '^[0-9]+/[0-9]+/[0-9]+$'

    应该是

    regex='^[0-9]+/[0-9]+/[0-9]+$'
    

    ShellCheck 会自动向您发出警告,并建议在何处引用您的变量以及如何逐行读取(您目前正在逐字执行)。

    【讨论】:

      【解决方案3】:

      消除正则表达式周围的空格:

      regex='^[0-9]+/[0-9]+/[0-9]+$'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-20
        • 1970-01-01
        • 2013-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-18
        • 2013-03-07
        相关资源
        最近更新 更多