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


18

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

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

Выход:

abc cdef ghi jk lmnopq rst uv wxyz

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

abc
cdef
ghi
jk
lmnopq
rst
uv
wxyz

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

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


Ответы:


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}
    

Для 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

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


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
    
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.