Как использовать REGEX внутри оператора if - PullRequest
3 голосов
/ 16 марта 2020

Мне нужно создать код, в котором я беру все файлы в текущей директории, заканчивающиеся * .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) будет одинаковым. Любая помощь приветствуется.

1 Ответ

5 голосов
/ 16 марта 2020

Вы можете использовать:

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 для тихого режима.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...