如何匹配文件名后缀

如何匹配文件名后缀

如何验证文件名是否.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 | .....

例子:

  1. machine_configuration.xml: 是的
  2. machine_configuration.xml.OLD: 不
  3. `machine_configuration.xml-HOLD:否
  4. machine_configuration.xml10: 不
  5. machine_configuration.xml@hold: 不
  6. 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

相关内容