命令行和bash脚本输出不同的zgrep

时间:2014-12-11 00:34:05

标签: bash grep

我有一个bash脚本,它循环遍历文件行(a.txt),其中包含gzip压缩文件列表的路径,并使用zgrep在每个文件中搜索短语。

我的bash脚本是:

for i in $(cat $1); do
  echo $i;
  echo zgrep -E '"phrase1|phrase2|phrase3|phrase4|phrase5|phrase6"' $i;
  zgrep -E '"phrase1|phrase2|phrase3|phrase4|phrase5|phrase6"' $i;
done

我在myscript.sh a.txt打电话:

输出结果为:

zgrep -E "phrase1|phrase2|phrase3|phrase4|phrase5|phrase6" myzippedfile.1.gz
phrase2     48      48.00   48
phrase3     35      35.00   35
phrase4     67      67.00   67
phrase5     99      99.00   99

(对a.txt中列出的每个文件重复)。

但是,当我执行脚本for循环中执行的zgrep命令时,我得到了不同的输出。

执行:

zgrep -E "phrase1|phrase2|phrase3|phrase4|phrase5|phrase6" myzippedfile.1.gz

在命令行中产生:

phrase1      29      29.00   29
phrase2      48      48.00   48
phrase3      35      35.00   35
phrase4      67      67.00   67
phrase5      99      99.00   99
phrase6      54      54.00   54

此输出正确,而bash脚本for循环生成的输出缺少第一行和最后一行。怎么会这样?

有没有人在我的bash脚本中看到任何问题? 为什么输出中会丢失第一行和最后一行?

1 个答案:

答案 0 :(得分:0)

替代品中的第一个和最后一个元素包含文字"个字符。因此,如果前面有phrase1,则您只会匹配",并且只有phrase6之后才会匹配"。你不应该在模式中使用那些双引号,它应该是:

zgrep -E 'phrase1|phrase2|phrase3|phrase4|phrase5|phrase6' $i;

手动执行zgrep命令时,您没有额外的引号。