Проблема возникает из-за egrep -w 'ошибка | исключение'
. Эта команда добавляет специальные символы до и после шаблона (например, ошибки или исключения) для выделения этих шаблонов в результате grep.
Это так, как упомянул Харальд. Шаблон 'ERROR' не соответствовал оператору вывода grep, поскольку в 'ERROR' между тегами STATUS в выводе grep были добавлены некоторые специальные символы с помощью флага -w
.
Следовательно, когда результат egrep
был отправлен в команду grep -v
, он не соответствовал шаблону.
Точка соответствует любому символу, поэтому двойная точка соответствует первым двум символам в именах файлов, поэтому они заменяются тире на rename
. Либо экранируйте каждую точку в регулярном выражении как \.
, либо используйте цикл (, это написано дляbash
):
for name in./*..*; do
newname=${name/../-}
printf 'Would move %s to %s\n' "$name" "$newname"
# mv -i "$name" "$newname"
done
Запустите один раз и убедитесь, что он выводит правильные данные, прежде чем удалить #
и запустить снова.
Цикл будет перебирать все имена в текущем каталоге, которые содержат две точки подряд. Подстановка параметра ${name/../-}
заменит первое вхождение двух последовательных точек на тире. Это шаблон подстановки имени файла оболочки, поэтому точка никоим образом не является особенной.