我有一个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脚本中看到任何问题? 为什么输出中会丢失第一行和最后一行?
答案 0 :(得分:0)
替代品中的第一个和最后一个元素包含文字"
个字符。因此,如果前面有phrase1
,则您只会匹配"
,并且只有phrase6
之后才会匹配"
。你不应该在模式中使用那些双引号,它应该是:
zgrep -E 'phrase1|phrase2|phrase3|phrase4|phrase5|phrase6' $i;
手动执行zgrep
命令时,您没有额外的引号。