shell rename file names with non-printable characters

Вы смотрели на инструмент наверху? Согласно странице руководства для этого:

«Сетевая нагрузка отображается для каждого процесса, если модуль ядра` netatop 'был установлен ».

1
22.03.2017, 23:30
1 ответ

sed подстановка ищет экземпляры (все экземпляры, поскольку вы используете g), соответствующие первому аргументу, и заменяет полное совпадение вторым аргументом. Таким образом, если вы включите "AIR" в первый аргумент, он будет заменен - вам нужно включить его во второй аргумент, если вы хотите сохранить его. Когда sed жалуется на недопустимую ссылку, это означает, что вы не определили соответствующую группу в первом аргументе (используя \( и \), или ( и ), поскольку вы указали -r).

Поскольку вы ищете "AIR", за которым следуют любые символы, сопровождаемые цифрами, я бы предложил следующее:

sed -r 's/AIR([^[:digit:]]*)([[:digit:]]+).jpg/AIRtest\2.jpg/g'

Это заменяет "AIR" на "AIR", любые нецифры на "test", и сохраняет все последующие цифры. Если вам не нужно обрабатывать символы между "AIR" и цифрами, вы можете игнорировать их:

sed -r 's/AIR[^[:digit:]]*([[:digit:]]+).jpg/AIRtest\1.jpg/g'

Если у вас есть Perl rename, вы можете транспонировать его для переименования ваших файлов:

rename 's/AIR[^[:digit:]]*([[:digit:]]+).jpg/AIRtest\1.jpg/g' AIR*.jpg

или

rename 's/AIR[^[:digit:]]*([[:digit:]]+).jpg/AIRtest$1.jpg/g' AIR*.jpg

(rename предпочитает $ для групповых ссылок).

4
27.01.2020, 23:19

Теги

Похожие вопросы