将已定义的行复制到Linux Bash中的另一个文件

时间:2013-10-29 20:48:13

标签: linux filter grep export

我遇到了Script的问题,我在基于Debian的发行版上运行: 我想将包含“Hello World”的每一行复制到一个新的文本文件中。 现在,我正在用这个脚本来做这件事:

#!/bin/bash 
string1=$(grep "Hello World" log.txt)
if [ "$string1" != "" ]; then
    echo $string1 >> output.txt
fi
truncate --size 0 log.txt

但是有一个问题: 我每小时都在运行这个脚本。 如果在一小时内在log.txt中写入10个“Hello World”,我将在output.txt中输入与一行简单的“Hello World”相匹配的所有行。阅读本文非常令人困惑。

如何将包含“Hello World”的每一行全部导出到分隔行的output.txt中?

(截断的最后一行只是我没有写空行)

1 个答案:

答案 0 :(得分:0)

在脚本中编写诸如var=$(grep "pattern" file)之类的语句会导致变量包含由空格分隔的整个语句结果集。要在单独的行上生成包含每个结果的文件,请编写类似

的内容
var=$(grep "pattern" file)
for v in "$var"
do
  echo $v >> $outfile
done

但是,这会对包含空格的任何模式/行产生问题,因此最好执行以下操作:

var=($(grep "pattern" file)) # creates an array
for v in "${var[@]}" # guards against whitespace issues
do
  echo $v >> $outfile
done

如果您只需要统计信息,也可以考虑使用var=$(grep -c "pattern" file)

另见this question