我想从这些文件中删除扩展名和前缀:
awstats.www.test1.com.conf
awstats.www.test2.com.conf
awstats.www.test3.com.conf
我需要删除awstats.
和.conf
,但保留文件www.test1.com
不变。我怎样才能做到这一点?
答案1
假设您与文件位于同一目录中:
for name in awstats.*.conf; do
basename "${name#awstats.}" .conf
done
循环内的代码将首先使用标准参数替换删除前缀awstats.
,$name
然后删除basename
后缀.conf
。
您也可以分两步完成,无需调用basename
:
for name in awstats.*.conf; do
newname=${name#awstats.} # trim off prefix
newname=${newname%.conf} # trim off suffix
printf '%s\n' "newname"
done
这两个循环不会重命名任何文件。
答案2
我假设rename
(perl-rename
在某些系统上,仅rename
在其他系统上)在这里最简单:
rename 's/^awstats\.//;s/\.conf$//' awstats.*.conf
正则表达式的解释:
s/^awstats\.//
awstats.
在行首(文件名)处不替换任何内容s/\.conf$//
.conf
在行尾(文件名)替换为空
使用该-n
选项进行试运行!