-1

我在基于 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?

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

4

1 回答 1

1

在脚本中编写语句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).

另请参阅此问题

于 2013-10-30T02:13:19.943 回答