将grep结果放入变量

时间:2017-07-11 14:39:11

标签: linux bash grep

我遇到了bash脚本的问题。我有一个特定位置的文件列表。我只需要从中抽出一个日期并将其与另一个日期进行比较。

for i in *.gz; do
    echo $i | grep -Eo '[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}'
done

以上是grep来自文件名的正确日期,但仅限于我使用echo时。在另一种情况下,我有错误。我试过了:

tmp=$(echo $i | grep -Eo '[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}')

也不行。有什么建议?我会很感激小帮助!

2 个答案:

答案 0 :(得分:0)

我根本不会使用grep;使用bash的内置正则表达式处理。

for i in *.gz; do
    [[ $i =~ [[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2} ]]
    echo "${BASH_REMATCH[0]}"
done

答案 1 :(得分:0)

绕过它,可以使用stat命令

for i in *.gz; do
    tmp=$(stat "$i" | awk '/Modify/ { print $2}' )
done

或者如果你想要一个数组

declare -a tmp
tmp+=$(
        for i in *.gz; do
            stat "$i" | awk '/Modify/ { print $2}'
        done 
       )

优点是,它独立于文件名

编辑: 我还不能评论别人的答案。这就是你比较日期的方式

sixago=$(date --date='-6 month' +%s)
tmp=$(date --date="$tmp" +%s)

if [ "$tmp" -gt "$sixago" ];then
   ...
fi