如何在 Linux 上使用 sed 从文件名中获取值?

如何在 Linux 上使用 sed 从文件名中获取值?

我如何才能从以下文件名中分别检索每个部分?

DSA4020_frontcover_20346501_2011-05.doc

我想要检索如下信息:

name = DSA4020
type = frontcover
id =  20346501
date = 2011-05

可以使用 sed 来做到这一点吗?

答案1

sed这个‘ ’食谱怎么样?

回显“DSA4020_frontcover_20346501_2011-05.doc”\
 | sed 's|\([^_]*\)_\([^_]*\)_\([^_]*\)_\([^\.]*\).*|name=\1,type=\2,id=\3,date=\4|'

给出了这个漂亮的 CSV 表格,

名称=DSA4020,类型=封面,id=20346501,日期=2011-05

答案2

删除扩展名后,您可以使用以下命令在每个 _ 处进行拆分:

$ echo "DSA4020_frontcover_20346501_2011-05.doc" | cut -d. -f-1 | cut -d_ -f1
DSA4020

每次用 2、3、4 替换最后一位数字以获取单独的值。

答案3

如果字段数量是恒定的:

for i in 1 2 3 4 5; do  
    VARS[${i}]=$(echo ${yourfilename} | cut -d _ -f${i})
done

然后访问${VARS[i]}...

选择 :

VARS[${i}]=$(echo ${yourfilename} | awk -v i=${i} -F_ '{print $i}'

如果支持的话(bash 3+)

for i in {1..5}; do (...)

如果您有多个文件名,只需添加一个for循环即可浏览所有文件名。

答案4

尝试这个:

echo "DSA4020_frontcover_20346501_2011-05.doc" | awk -F '_' '{print " name =" $1 "\n type =" $2 "\n id =" $3 "\n date =" $4 } '

输出将会像这样:

name = DSA4020
type = frontcover
id = 20346501
date = 2011-05

相关内容