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

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

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

Вывод:

abc cdef ghi jk lmnopq rst uv wxyz

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

abc
cdef
ghi
jk
lmnopq
rst
uv
wxyz

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

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

18
задан 8 May 2014 в 14:24

6 ответов

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

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

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

    cut -d ' ' --output-delimiter= 
  3. Использование sed

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

    perl -pe 's/ /\n/g' example
    
  5. Использование оболочка

    foo=$(cat example); echo -e ${foo// /\\n}
    
\n' -f 1- example
  • Использование sed

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

    perl -pe 's/ /\n/g' example
    
  • Использование оболочка

    foo=$(cat example); echo -e ${foo// /\\n}
    
  • 37
    ответ дан 16 November 2019 в 12:43

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

    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, является пространством или символом новой строки. Эта команда устраняет дополнительную пустую строку, появившуюся при выполнении первой команды.

    16
    ответ дан 16 November 2019 в 12:43

    Можно использовать xargs,

    cat example | xargs -n 1
    

    или, лучше

    xargs -n 1 < example
    
    8
    ответ дан 16 November 2019 в 12:43

    Используя perl острота:

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

    Это заменит пробелы, и вкладки с "ВХОДЯТ" (иначе \n)

    2
    ответ дан 16 November 2019 в 12:43

    Никакой отправленный Python, таким образом, вот то, что:

    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 перенаправление.

    1
    ответ дан 16 November 2019 в 12:43

    Подобный 'TR' выше, но с дополнениями:

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

    • Преобразовывает несколько пробелов или вкладок к 1 новой строке

      tr -s '[:space:]' '\n' < example
      
    0
    ответ дан 16 November 2019 в 12:43

    Другие вопросы по тегам:

    Похожие вопросы: