【问题标题】:bash script read line by line and echo to filebash脚本逐行读取并回显到文件
【发布时间】:2013-06-13 02:00:16
【问题描述】:

我不能让这个脚本做我想做的事。有人可以帮助它应该逐行读取文本文件,然后将结果回显到另一个文件中。但它并没有识别空白行。因为它应该打印该行,除非它是空白的,那么它应该打印到文件中。

iname = checktest
while read line           
do  

if [ "$line" == "" ];
then
    echo "<blank>" >> $iname2.txt

else    
  echo "$line"  >> $iname2.txt
fi

done <$iname.txt

【问题讨论】:

  • 为什么不sed 's/^$/&lt;blank&gt;/'

标签: linux bash


【解决方案1】:

不能在 bash 中的变量赋值之间有空格。

#!/bin/bash

iname=checktest  #Should be no space between = sign
while read line; do  
    if [ -z "$line" ]; then
        echo "I saw an empty line ... will report this"
    else    
        echo "$line"  
    fi
done <"$iname".txt > newfile.txt

另外,在循环结束后使用&gt;。这可以防止不必要的 I/O 在每个循环周期中打开文件进行写入。

【讨论】:

    【解决方案2】:

    像这样进行一些编辑:

    iname = 检查测试

     while read line
     do 
    if [ -z "$line" ]
     then echo "" >> ${iname}2.txt
      else
     echo "$line" >> ${iname}2.txt
     fi
    done  < ${iname} ;
    

    现在应该可以了,希望对你有帮助……

    【讨论】:

      【解决方案3】:
      iname = checktest
      while read line           
      do  
      
      if [ "$line" != "" ];
      then
          echo $line >> 
      fi
      
      done < $iname > ${iname}2.txt
      

      对我来说,只在匹配时做某事似乎更合乎逻辑。

      【讨论】:

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