Я запутался в отношении способа -s
, -t
и -c
опции работают в команде tr . Когда я делаю
echo I am a good boy | tr good bad
Я получаю вывод:
I am a bddd bdy
Это вполне понятно, так o
как повторяется в good
. Последнее возможно изменение места o
IS d
, и , следовательно , выход.
Теперь, когда я делаю
echo I am a good boy | tr -s good bad
выход
I am a bd bdy
Предполагается, что -s
опция сжимает каждый повторяющийся вхождений каждого символа в наборе 1 в один и затем заменяет каждый символ в наборе 1 на соответствующий символ в наборе 2, который находится в той же позиции.
Так и должно было быть
I am a bad bay.
Почему изменения?
Более того, когда я делаю
echo I am a good boy | tr -c good bad
я получил dddddddgoodddodd
Как работает -c
опция tr
, ссылаясь на этот пример?
И напоследок: как превратить себя из хорошего мальчика в плохого мальчика .... :): P То есть
echo I am a good boy | tr <something>
дает мне вывод как I am a bad boy
.
-s
переключатель заставляетtr
сжать любые символы из последнего аргументаtr
(а не первого, как вы говорите), которые повторяются во входных данных. Это отмечено в статье, на которую вы ссылаетесь, и объясняется в последнем абзаце в разделе «Описание» справочной страницы .Ваше понимание
-s
неверно, оно заменяет повторяющиеся вхождения символов в наборе 1 на входе одним символом. это не изменяет набор, например.дает
В
-c
опции заменяет набор 1 с дополнением (то есть. Множество всех символов не содержится в наборе 1). Вы можете использовать это, чтобы удалить все, кроме указанных символов, например.выходы
источник
Другие ответы покрыты
tr
«ы-s
,-t
и-c
варианты , но для полноты картины :У вас проблемы, потому что вы выбрали не тот инструмент.
tr
для преобразования персонажейsed
для редактирования потокаПоскольку оба
good
иbad
являются последовательностью символов в потокеsed
, это лучшее совпадение.echo I am a good boy | <something>
дает мне вывод как:I am a bad boy
Это
s/..../..../
заменитель. Что бы ни соответствовало первому регулярному выражению, оно будет заменено вторым./g
Флаг в конце для глобальной замены таким образом все вхождения будут заменены не только первый.источник
да. в точку!
tr -s
заменяет экземпляры повторяющихся символов одним символом.(через страницу руководства.)
Итак, это выглядит так:
это превращается
good
вbddd
. повторные случаи - 3 'd.поэтому он заменяет эти три экземпляра одним экземпляром.
то есть это делает его бд. :)
источник