linux - 参数替换替换为交替 (OR) |
问题描述
考虑到大小写,我正在尝试替换文件名的扩展名,但没有成功。
#!/bin/bash
pdf_file="/root/users/test.pdf"
jpg_file="${pdf_file/.pdf/.jpg}"
echo $jpg_file
我试过了,但它不起作用:
jpg_file="${pdf_file/(.pdf|.PDF)/.jpg}"
解决方案
您可以使用这样的全局模式:
$ echo "${pdf_file/.[Pp][Dd][Ff]/.jpg}"
/root/users/test.jpg
如果您使用扩展的 glob 模式 ( shopt -s extglob)
,您可以使用它来代替:
$ echo "${pdf_file/.@(PDF|pdf)/.jpg}"
/root/users/test.jpg
或者您可以使用 shell 选项在匹配时忽略大小写:
$ shopt -s nocasematch
$ pdf_file="/root/users/test.PDF"
$ echo "${pdf_file/.pdf/.jpg}"
/root/users/test.jpg
备注对所有三种解决方案都有效:在任何出现的地方替换模式,但扩展可能在最后——我们可以确保只在最后替换它:${parameter/pattern/string}
echo "${pdf_file%.[Pp][Dd][Ff]}.jpg"
它适用于任何 POSIX shell,或
shopt -s extglob
echo "${pdf_file%.@(PDF|pdf)}.jpg"
或者
shopt -s nocasematch
pdf_file="/root/users/test.PDF"
echo "${pdf_file%.pdf}.jpg"
推荐阅读
- bison - 无法修复/理解野牛的简单“移位/减少冲突”
- .htaccess - htaccess RewriteRule no redirect, first rule works, second not
- recaptcha - Recaptcha v3: Could not connect to the reCAPTCHA service. Please check your internet connection and reload to get a reCAPTCHA challenge
- python - Module object in callable in python - Atom.io as as Jupyter notebook
- mysql - 使用 jOOQ 跳过行的“Seek”分页
- c++ - 为什么程序会错过“if”运算符?
- elasticsearch - 弹性搜索标记字符
- javascript - 按月对对象数组进行排序
- php - 在 prestashop 1.6 中发送之前如何获取电子邮件内容
- python - IPython`显示`到字符串