1.Понимание поведения tr
команды:
обзорного руководства по tr
команд, он утверждает, что:
ИМЯ
тр - переводить или удаление символов
СИНТАКСИСА
tr [OPTION]... SET1 [SET2]
Где:
SET
s определяется как строки символов
Таким образом, каждый символ в первом списке (SET1
) будет изменен их коллегами во втором списке (SET2
)
, если у нас есть файл под названием «файл», содержащий:
wordorwd
, выполнив следующую команду:
tr 'word' 'abcd' < file
мы получим abcdbcad
Более подробную информацию о tr
команды вы можете проверить это link
2. Понимание выходной формат ls
команды:
Чтобы понять выход команды ls
. Нам нужно посмотреть, как это работает внутри страны. Вы можете получить его, скачав пакет coreutils
:
git clone git://git.sv.gnu.org/coreutils
Или проверить его непосредственно по этой ссылке: ls-source code.
В целом, он ищет сначала каталог, а затем извлекает все связанные с ним файлы, сортирует и нажимает их в связанном списке, после чего он появляется и передает их в выходной поток после добавления «».
Существует также команда Linux называется od
, который может показать выход ls
команды:
ls -a | od -c
Теперь ls -a | tr "\n" " "
на самом деле работает хорошо и меняет символ новой строки в пространство, что приводит к получить как отображение только строка, содержащая все имена файлов, разделенные пробелами.
Для ls -a | tr "\r\n" " "
нет возврата каретки в ls
Выход только новой строки будет изменен, и это объясняет то же поведение.
Вы можете использовать -d
вариант tr
команды, чтобы подтвердить, что путем удаления первого возврата каретки (Нет эффекта), а затем перевод строки
ls -a | tr -d "\r"
ls -a | tr -d "\n"
'тр«\ п»" «' может это сделать. Проблема заключается в том, что ваш 'ls -a' –
. Здесь основное внимание:' tr '\ n "" "' = 'tr" \ n "" ""? Четыре пробела = два пробела в команде tr? –
@it_is_a_literature Поскольку tr отображает одиночные символы на отдельные символы, а не на строки. \ r в пространство, \ n в космос. Вы используете неправильный инструмент. – Jens