如何在 if 语句中使用 REGEX

Nic*_*ick 3 bash shell sh

我需要创建一个代码,其中我获取当前目录中以 *.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
Run Code Online (Sandbox Code Playgroud)

*.jpg) 和 *.conf) 的代码是相同的。任何帮助表示赞赏。

anu*_*ava 5

您可以使用:

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
Run Code Online (Sandbox Code Playgroud)

-q选项 ingrep用于安静模式。