`tr` заменяет больше, чем я ожидал

`tr` заменяет больше, чем я ожидал

У меня куча файлов с моей преподавательской работы, которые я хочу поместить в OneDrive для регулярного резервного копирования. Мои коллеги плохо с именами файлов, поэтому им нужна очистка, чтобы OneDrive их принял.

Единственное, чего я не могу понять, так это как выбрать пробел перед точкой.

Я пробую это

bash-3.2$ echo "foo bar .pdf" | tr -s " \." '\.'

и получая это

foo.bar.pdfвместо foo bar.pdf. Что не так с моей командой?

решение1

trзаменяетодинокийсимволы на отдельные символы, и вы сказали ему заменить каждый пробел и каждую точку на точку (за исключением -sсжатия пробела+точки в одну сущность для замены). Другими словами, одного пробела-или-точки достаточно, чтобы запустить ваш tr.

Для замены строк используйте sed:

echo "foo bar .pdf" | sed 's/ \././g'

Примечание: я использовал , gпоскольку trвы использовали глобально, поэтому я предположил, что это то, что вам нужно в общем случае (это не имеет значения для этой конкретной строки foo bar .pdf).

Связанный контент