如何在 if 语句中使用 REGEX

How to use REGEX inside of an if statement

我需要创建一个代码,在其中获取当前目录中以 *.txt、*.jpg、*.conf 结尾的所有文件。在我收集完这些之后,我需要检查它们是否包含某一行,即:
<?xml version="1.0" encoding="UTF-8"?>
如果它们确实包含以下行,那么我需要将它们重命名为 *.xml。


我的问题是:如果文件包含给定的正则表达式代码,我如何在 if 语句中检查正则表达式?

我当前的代码:

ls *.txt *.data *.conf
for f in *.*
case $f in
*.txt)
if [[ "$(grep -q '<\?xml version="[0-9]*.[0-9]*" encoding=".*"\?>' *.txt) ]]; then
mv -- "$f" "${%f.txt].xml"
fi
;;

esac
done
ls

*.jpg) 和 *.conf) 的代码是一样的。感谢任何帮助。

您可以使用:

for f in *.txt *.data *.conf; do
   if grep -iq '<?xml version="[0-9]*\.[0-9]*" encoding="[^"]*"?>' "$f"; then
      mv "$f" "${f%.*}.xml" 
   fi
done

-q grep 中的选项用于安静模式。