【问题标题】:bash: read line and keep spacesbash:读取行并保留空格
【发布时间】:2014-01-13 15:24:14
【问题描述】:

我正在尝试从包含多行的文件中读取行。我想识别只包含空格的行。 根据定义,空行是空的并且不包含任何内容(包括空格)。 我想检测看似为空但不是空的行(仅包含空格的行)

    while read line; do
        if [[ `echo "$line" | wc -w` == 0 && `echo "$line" | wc -c` > 1 ]];
        then
             echo "Fake empty line detected"
        fi
    done < "$1"

但是因为 read 忽略了字符串开头和结尾的空格,所以我的代码不起作用。

文件示例

hi
 hi
(empty line, no spaces or any other char)
hi
  (two spaces)
hey

请帮我修复代码

【问题讨论】:

    标签: bash space


    【解决方案1】:

    通过清除IFS(内部字段分隔符)的值来禁用分词:

    while IFS= read -r line; do
    ....
    done < "$1"
    

    -r 不是绝对必要的,但它是一种很好的做法。


    此外,还有一种更简单的方法来检查 line 的值(我假设您正在寻找只有空格的行):

    if [[ $line =~ ^$ ]]; then
        echo "Fake empty line detected"
    fi
    

    【讨论】:

    • 您不需要正则表达式来检查行是否为空。 [[ -z $line ]] 很乐意为您做到这一点。
    【解决方案2】:

    按照您的代码,它可以得到改进。

    while read line; do
            if [ -z "$line" ]
            then
                 echo "Fake empty line detected"
            fi
    done < "$1"
    

    测试-z 检查$line 是否为空。

    输出:

    Fake empty line detected
    Fake empty line detected
    

    【讨论】:

      猜你喜欢
      • 2011-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多