2016-12-24 7 views
1

Я хочу заменить новую строку четырьмя пробелами.Как выразить четыре пробела в tr?

tr "\n" " " 

Проверено, что tr "\n" " " не может быть выполнен.

ls -a |tr "\n" " " 
.sane .shutter .ssh .subversion .svx .svy .svz .swa .swb .swc .swd .swe 

Здесь нет четырех белых мест.

1.\n работает действительно.
2. Разница между двумя пробелами и четырьмя пробелами.

enter image description here

3.\n и \r\n имеют такой же эффект.

enter image description here

+0

'тр«\ п»" «' может это сделать. Проблема заключается в том, что ваш 'ls -a' –

+0

. Здесь основное внимание:' tr '\ n "" "' = 'tr" \ n "" ""? Четыре пробела = два пробела в команде tr? –

+1

@it_is_a_literature Поскольку tr отображает одиночные символы на отдельные символы, а не на строки. \ r в пространство, \ n в космос. Вы используете неправильный инструмент. – Jens

ответ

1

Неправильный инструмент. tr отображает одиночные символы на отдельные символы, а не на строки. Из (1) страницы вручную т.р.:

[...] персонажи string1 переводятся в символы в строка2 где первый символ в string1 является переведено на первый символ в string2 и так далее. Если string1 является длиннее string2, последний символ найден в string2 не дублируется до string1 истощается.

Вы хотите получить более общую картину Искателя и заменителя:

ls | perl -p -e 's/\n/ /' 
1

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"