我的名字中有很多带字母和数字的jpg文件。我想删除所有字母,例如abc12d34efg.jpg
变为1234.jpg
。对于for循环,我想:
for i in *.jpg; do mv "$i" ...
但是我无法找到我想要的命令。
答案 0 :(得分:1)
使用shell参数扩展:
for fname in *.jpg; do mv "$fname" "${fname//[[:alpha:]]}jpg"; done
"${fname//[[:alpha:]]}"
是所有[[:alpha:]]
(任何字母)出现的替代品。因为这也删除了jpg
,我们必须再次添加它 - 附加的jpg
会这样做。
答案 1 :(得分:1)
您可以使用sed使用正则表达式替换所有字母。
for i in *.jpg; do mv $i `echo $i | sed -e 's/[a-zA-Z]//g'`jpg; done
答案 2 :(得分:0)
以下是使用tr
for f in *.jpg ; do n="$(echo ${f} | tr -d a-zA-Z )" ; mv "$f" "${n}jpg" ; done
使用一些格式,它看起来像
for f in *.jpg ; do
n="$(echo ${f} | tr -d a-zA-Z )"
mv "$f" "${n}jpg"
done
以下是发生的事情:
首先,我们使用tr -d a-zA-Z
删除名称中的所有字母。从abc12d34efg.jpg
开始,我们得到1234.
(.
末尾有一个点,不属于a-z
和A-Z
间隔)并将此值分配给变量$n
。 Ť
然后我们可以将$f
重命名为${n}jpg
。那就是它。
更新以删除小写字母和大写字母使用tr -d a-zA-Z
,仅删除使用tr -d a-z
的小写字母。