在Linux Bash中将定义的行复制到其他文件

在Linux Bash中将定义的行复制到其他文件,linux,filter,grep,export,Linux,Filter,Grep,Export,我在基于Debian的发行版上运行的脚本有问题: 我想将包含“Hello World”的每一行复制到一个新的文本文件中。 现在,我用这个脚本来做: #!/bin/bash string1=$(grep "Hello World" log.txt) if [ "$string1" != "" ]; then echo $string1 >> output.txt fi truncate --size 0 log.txt 但有一个问题: 我每小时都在运行这个脚本。 如果在一个

我在基于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的单独行中


(带有truncate的最后一行只是我没有得到写空行)

在脚本中编写语句,例如
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=$(GRIP-C)模式“文件”< /> > < /P>


另请参见。

听起来像是一个可以通过查看
grep
的命令行选项来解决的问题……您好,谢谢,但我已经阅读了很多次,找不到此设置。我知道,如果您在cli上搜索某些内容,则输出是多行的。但当您在脚本中使用它并将其放入变量时,它是单行的。我知道变量通常是单行的。但是,有没有一种解决方案可以将每个匹配项放在数组的一个字符串中?出于好奇,您决定在脚本中循环搜索结果,而不是执行类似于
grep“pattern”file>>log.txt的操作,这有什么特别的原因吗?