1

我的文件具有以下形式的名称:

year-month-day-title.ext  

年为 4 位数字,月和日各为 2 位数字。

我只想从文件名中捕获标题,标题由字母数字字符和连字符组成。

我的尝试sed是:

sed -En 's/\d{4}-\d{2}-\d{2}-([\w\\-]+)\.ext/\1/p'

但它不起作用,我不知道为什么,我对 regex/sed 不是很方便:(

只要我可以输入文件名并取出标题,任何标准实用程序都可以

4

4 回答 4

1

我相信sed使用与 PCRE 不同的 POSIX 正则表达式,因此 \w, \d 甚至不可用,您的正则表达式将类似于:

echo '0000-00-00-title.ext' | sed -En 's/[0-9]{4}-[0-9]{2}-[0-9]{2}-(.+)\.ext/\1/p'

输出:

title
于 2013-09-21T03:25:53.097 回答
0

这是另一个使用cut

echo 0000-00-00-title.ext | cut -d- -f3 | cut -d. -f1
于 2013-09-21T07:03:23.770 回答
0

我觉得这样的问题更适合awk

echo "year-month-day-title.ext" | awk -F"[-.]" '{print $4}'
于 2013-09-21T03:30:10.263 回答
0

其他一些 awk 版本

echo '0000-00-00-title.ext' | awk -F. '{n=split($1,a,"-");print a[n]}'

这有效,因为日期有固定长度

echo '0000-00-00-title.ext' | awk -F. '{print substr($1,12)}'
于 2013-09-21T06:56:36.300 回答