我有一个具有以下命名方案的文件目录:
<project name>-<group name>.txt
我想从循环浏览的文件中提取<group name>
:
#!/bin/sh
for f in *; do
echo "group name: ${f}"
done
这怎么办?我正在尝试${f##...}
和${f%...}
,但到目前为止没有成功。我不确定是否可以将它们组合在一起,所以我可以先省略前缀<project name>-
,然后再省略后缀.txt
。
答案 0 :(得分:0)
我不知道是否可以在一行中完成,但是如果分步骤进行,那很容易:
for f in *.txt; do
base=${f%.txt}
projectname=${base%-*}
groupname=${base#*-}
echo project name: $projectname
echo group name: $groupname
done
如果您可以调用外部程序,那么它也可以工作并且可读性强。
for f in *.txt; do
groupname=$(basename ${f#*-} .txt)
echo group name: $groupname
done
答案 1 :(得分:0)
for file in *-*.txt; do
# shortest match: a-b-c-d.txt => d
[[ $file =~ ([^-]+).txt$ ]] && echo "${BASH_REMATCH[1]}"
# longest match: a-b-c-d.txt => b-c-d
[[ $file =~ -(.+).txt$ ]] && echo "${BASH_REMATCH[1]}"
done