如何验证文件名是否.xml
以 结尾.any-string
?例如.previous或.backup或bck12等...
我需要打印 XML 文件名,但以 结尾.any-string
或后面有任何内容的XML 文件除外.xml
如何用 grep 或 awk 或 sed 或 perl 或任何其他想法来验证这一点?就像是
file=machine_configuration.xml
file=machine_configuration.xml.previos
file=machine_configuration.xml.backup
echo $file | .....
例子:
machine_configuration.xml
: 是的machine_configuration.xml.OLD
: 不- `machine_configuration.xml-HOLD:否
machine_configuration.xml10
: 不machine_configuration.xml@hold
: 不machine_configuration.xml_need_to_verifi_this
: 不
答案1
使用正则表达式结束锚点 ( $
),例如:
echo "$file" | grep '\.xml$'
要查找所有以“xml”结尾的文件,我建议使用命令find
,例如:
find . -name '*.xml'
将递归列出当前目录中的所有 xml 文件。
答案2
如果我理解正确的话,你想检测文件名是否以.xml
.
case $file in
*.xml) echo "$file";;
esac
如果您想在文件名不匹配时执行某些操作:
case $file in
*.xml) echo "matched $file";;
*) echo "skipping $file";;
esac
答案3
如果变量中已有文件名,一个好的方法是参数扩展
$ echo $file
text.xmllsls
$ echo ${file%.xml*}.xml
text.xml
其中%.xml*
,最后出现的.xml
及其后面的所有内容都将被删除。因此我也再次回显了.xml。
或者,也进行测试
$ file=test.xmlslsls
$ file2=${file%.xml*}.xml
$ if [ $file = $file2 ]; then echo $file; fi
$
$
$ file="test.xml"
$ file2=${file%.xml*}.xml
$ if [ $file = $file2 ]; then echo $file; fi
test.xml
或者,在一行上
$ if [ $file = ${file%.xml*}.xml ]; then echo $file; fi
答案4
最简单的方法...
echo file=machine_configuration.xml | cut -d '.' -f 1