Как заменить пробелы символами новой строки / ввести в текстовом файле?

18

У меня есть простой текстовый файл с именем «пример».

Чтение с терминальной команды: cat example

Выход:

abc cdef ghi jk lmnopq rst uv wxyz

Я хочу преобразовать (преобразовать) в следующую форму: (ожидаемый вывод из cat example)

abc
cdef
ghi
jk
lmnopq
rst
uv
wxyz

Как я могу сделать это через командную строку?

(Это только пример файла, я хочу преобразовать положение слова в вертикальном столбце)

Pandya
источник
Связанный: unix.stackexchange.com/q/169995/85039
Сергей Колодяжный

Ответы:

37

Несколько вариантов:

  1. Классический, используйте tr:

    tr ' ' '\n' < example
    
  2. использование cut

    cut -d ' ' --output-delimiter=$'\n' -f 1- example
    
  3. использование sed

    sed 's/ /\n/g' example
    
  4. использование perl

    perl -pe 's/ /\n/g' example
    
  5. Используйте оболочку

    foo=$(cat example); echo -e ${foo// /\\n}
    
terdon
источник
Для sedпримера мне нужно было добавить a, $чтобы получить bash, чтобы заменить его на новую sed $'s/ /\\\n/g' example
строку,
Пример выше для OSX SED, для sed $'s/ /\\n/g'
GNU-SED
16

Попробуйте команду ниже

awk -v RS=" " '{print}' file

ИЛИ

awk -v RS='[\n ]' '{print}' file

Пример:

$ awk -v RS=" " '{print}' example
abc
cdef
ghi
jk
lmnopq
rst
uv
wxyz

Объяснение:

RS (разделитель записей) является встроенной переменной awk. В первой команде значение, данное переменной-разделителю записи, - это пробел. поэтому awk прерывает строку печати, когда находит пробел.

Во второй команде значение, данное переменной RS, является пробелом или символом новой строки. Эта команда устраняет лишнюю пустую строку, появившуюся при выполнении первой команды.

Авинаш Радж
источник
8

Вы можете использовать xargs,

cat example | xargs -n 1

или лучше

xargs -n 1 < example
souravc
источник
6
xargs -n 1 < exampleспасает тебя 1 котенок
Rinzwind
2

Используя perloneliner:

perl -p -i -e 's/\s/\n/g' example

Он заменит пробелы и табуляции на «ENTER» (он же \n)

Сильвен Пино
источник
1

Никто не размещал питон, так вот что:

python -c "import sys;lines=['\n'.join(l.strip().split()) for l in sys.stdin.readlines()];print('\n'.join(lines))" < input.txt 

Мы перенаправляем входной файл в pythonпоток stdin и читаем его построчно. В каждой строке удаляется завершающий символ новой строки, разбивается на слова, а затем объединяется в одну строку, где каждое слово отделяется новой строкой. Это делается для того, чтобы обеспечить наличие одного слова в строке и избежать вставки нескольких символов новой строки в случае наличия нескольких пробелов рядом с друг с другом. В итоге мы получаем список строк, который затем снова объединяется в большую строку и распечатывается в поток stdout. Это позже может быть перенаправлено в другой файл с > out.txt перенаправлением.

Сергей Колодяжный
источник
0

Аналогично «tr» выше, но с дополнениями:

  • Также работает для вкладок

  • Преобразует несколько пробелов или табуляции в 1 новую строку

    tr -s '[:space:]' '\n' < example
    
AstroTom
источник