我遇到了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中?
(截断的最后一行只是我没有写空行)
答案 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)
。