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

10

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

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

Вывод:

abc cdef ghi jk lmnopq rst uv wxyz

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

abc
cdef
ghi
jk
lmnopq
rst
uv
wxyz

Как это сделать с помощью командной строки?

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

    
задан Pandya 05.05.2014 в 14:34
источник

5 ответов

23

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

  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 05.05.2014 в 14:42
источник
15

Попробуйте выполнить команду

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 (Record seperator) - встроенная переменная awk. В первой команде значение, заданное переменной разделителя записи, является пробелом. поэтому awk ломает линию от печати всякий раз, когда находит пробел.

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

ответ дан Avinash Raj 05.05.2014 в 14:37
6

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

cat example | xargs -n 1

или, лучше

xargs -n 1 < example
    
ответ дан souravc 05.05.2014 в 14:42
2

Использование perl oneliner:

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

Он заменит пробелы и вкладки «ENTER» (aka \n )

    
ответ дан Sylvain Pineau 05.05.2014 в 14:42
1

Никто не отправил python, так вот что:

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

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

    
ответ дан Sergiy Kolodyazhnyy 16.01.2017 в 13:52