如何使用sed只提取日期?

时间:2014-07-28 12:12:27

标签: linux bash sed

我有一个目录,其中包含名为' 1',' 2',3' ..的目录,每个文件夹与'日期相关,如'符号链接:

1 -> 2013-03-12
2 -> 2013-02-12
3 -> 2013-01-12
..

我想做的就是进入符号链接名称的变量。例如,在上面的示例中,我将:

$LAST == "2013-01-13"

我正在使用bash脚本执行所有操作,而我正考虑将sedls --sort选项结合使用。

我似乎无法从ls中提取日期。

知道怎么做吗?

4 个答案:

答案 0 :(得分:2)

您可以使用readlink

  

readlink - 打印已解析的符号链接或规范文件名

下面是一个示例代码,列出当前目录中的所有文件( cf。 ./*)并仅读取符号链接的目标( cf。 {{ 1}})进入[[ -h $fn ]]变量。

Oneliner

$LAST

脚本

for fn in ./*; do [[ -h $fn ]] && LAST="$(basename "$(readlink "$fn")")"; done 

答案 1 :(得分:1)

有用于获取链接目标名称的工具readlink。例如。 readlink *

你的问题不是很清楚,我想你想要的可能是先排序ls输出然后取最后一个链接目标名称。你可以尝试:

ls -lc|awk -F'-> ' 'NF==2&&/-> ....-..-..$/{n=$NF}END{print n}'

这可能不是完美的解决方案,因为它取决于ls输出。你的“类似日期”的字符串的正则表达式检查是相对宽松的,如果你愿意,可以使它更严格。

答案 2 :(得分:1)

你可以拥有

find dir -mindepth 1 -maxdepth 1 -regex '.*/[0-9]+$' | sort -V | xargs -n 1 readlink

获得最后一个:

readlink "$(find dir -mindepth 1 -maxdepth 1 -regex '.*/[0-9]+$' | sort -V | tail -n 1)"

您可以选择添加-type l

使用Bash,您可以使用此代替find

shopt -s extglob
printf '%s\n' dir/+([0-9])

答案 3 :(得分:0)

我不是Linux专家 一些答案我只是不知道如何修改以满足我的需要 这正是我所需要的:

LAST_DATE=`ls -l | sed -n 's/.*\([0-9][0-9][0-9][0-9]\-[0-9][0-9]\-[0-9][0-9]*\).*/\1/p' | sort -r | head -1`;