2

Я не могу понять параметр complement (-c) в команде tr используемой вместе с режимом замены (то есть без каких-либо других параметров), например, для:

эхо "а" | tr-cab

Почему это производит:

ab root @ Slack

(строка ab без перевода строки)?

1 ответ1

4

Команда tr обрабатывает все символы, включая непечатные.

echo в вашем примере производит вывод, состоящий из двух символов:

  • a
  • символ новой строки (\n)

В вашем вызове вы приказали tr заменить все символы, которые дополняют a (простыми словами: кроме a) на b , поэтому:

  • он оставил характер нетронутыми
  • заменил символ новой строки на a .

Попробуйте протестировать его с помощью printf (который не добавляет в конец новую строку, как это делает echo )

Это приводит к тому же вводу для tr что и к echo , поэтому вывод также тот же:

printf "a\n" | tr -c a b
ab[~]#

Сравнить с:

printf "a" | tr -c a b
a[~]#

А также:

printf "a\n\n" | tr -c a b
abb[~]#

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .