假设我有一个文件dates.json
:
2015-11-01T12:01:52
2015-11-03T03:58:57
2015-11-09T02:43:59
2015-11-10T08:22:00
2015-11-11T05:14:51
2015-11-11T12:47:02
2015-11-13T08:33:40
我想根据日期将行分隔到不同的文件。 我制作了以下剧本:
#!/bin/bash
set -e
file="$1"
for i in $(seq 1 1 31); do
if [ $i -lt 10 ]; then
echo 'looking for 2015-11-0'$i
cat $file | grep "2015-11-0"$i > $i.json
else
echo 'looking for 2015-11-'$i
cat $file | grep "2015-11-"$i > $i.json
fi
done
当我执行时,我得到以下内容:
$ bash example.sh dates.json
looking for 2015-11-01
looking for 2015-11-02
如果我尝试没有cat ...行,脚本会打印所有echo命令,如果我只尝试cat |命令行上的grep命令。
你知道为什么会这样吗?
答案 0 :(得分:3)
如果您需要在脚本的其他部分使用set -e
,则需要处理grep
不要停止脚本:
# cat $file | grep "2015-11-0"$i > $i.json
grep "2015-11-0"$i "$file" > $i.json || :
答案 1 :(得分:2)
set -e
强制脚本退出。
+
grep
如果无法在文件中找到匹配项,则返回1。
+
dates.json没有 2015-11-02
=
错误
答案 2 :(得分:0)
这是因为我们的set -e导致脚本退出。删除此行,然后它应该工作