我如何才能从以下文件名中分别检索每个部分?
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