Як замінити пробіли на нові рядки / ввести у текстовий файл?


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прикладу мені потрібно було додати $баш, щоб замінити фактичним sed $'s/ /\\\n/g' example
новим

Вище приклад для OSX sed, для gnu-sed:sed $'s/ /\\n/g'
acumartini

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 (Seperator Record) - це вбудована змінна awk. У першій команді значенням, вказаним змінною роздільника записів, є пробіл. тому awk відриває лінію від друку кожного разу, коли знайде пробіл.

У другій команді значенням змінної RS є пробіл або символ нового рядка. Ця команда виключає зайвий порожній рядок, який з'явився під час виконання першої команди.


8

Ви можете використовувати xargs,

cat example | xargs -n 1

або, краще

xargs -n 1 < example

6
xargs -n 1 < exampleрятує вас 1 кошеня
Rinzwind

2

Використання perlонлайну:

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

Він замінить пробіли та вкладки на "ENTER" (ака \n)


1

Ніхто не публікував python, ось ось що:

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

Ми перенаправляємо вхідний файл у pythonstdin-потік і читаємо його рядок за рядком. Кожен рядок позбавлений наступного нового рядка, розбивається на слова, а потім знову з'єднується в один рядок, де кожне слово відокремлено новим рядком. Це робиться для того, щоб мати одне слово на рядок та уникати введення декількох нових рядків у випадку, якщо поруч є кілька пробілів один одного. Врешті-решт ми закінчуємо списком рядків, який потім знову об'єднується у більшу рядок і роздруковується на stdout stream. Це пізніше може бути перенаправлено до іншого файлу з > out.txt перенаправленням.


0

Схожий на 'tr' вище, але з доповненнями:

  • Також працює для вкладок

  • Перетворює кілька пробілів або вкладок в 1 новий рядок

    tr -s '[:space:]' '\n' < example
    
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.