假设我有一个文件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 \ grep命令,它就能工作。
你知道它为什么会这样吗?
发布于 2015-12-15 18:59:24
如果脚本的其他部分需要set -e,则需要处理grep以避免停止脚本:
# cat $file | grep "2015-11-0"$i > $i.json
grep "2015-11-0"$i "$file" > $i.json || :发布于 2015-12-15 18:57:26
如果命令以非零状态退出,set -e将强制脚本退出。
+
如果grep无法在文件中找到匹配项,则返回1。
+
dates.json没有2015-11-02
=
错误
发布于 2015-12-15 18:49:40
这是因为我们的集合-e导致脚本退出。去掉这一行,它就能工作了。
https://stackoverflow.com/questions/34296991
复制相似问题