Làm cách nào để thay thế khoảng trắng bằng dòng mới / nhập vào tệp văn bản?


18

Tôi có tập tin văn bản đơn giản có tên là "ví dụ".

Đọc với lệnh đầu cuối: cat example

Đầu ra:

abc cdef ghi jk lmnopq rst uv wxyz

Tôi muốn chuyển đổi (chuyển đổi) thành dạng sau: (đầu ra dự kiến ​​từ cat example)

abc
cdef
ghi
jk
lmnopq
rst
uv
wxyz

Làm thế nào tôi có thể làm điều này thông qua dòng lệnh?

(Đây chỉ là một tệp ví dụ, tôi muốn chuyển đổi vị trí của từ trong cột dọc)


Câu trả lời:


37

Một vài lựa chọn:

  1. Các cổ điển, sử dụng tr:

    tr ' ' '\n' < example
    
  2. Sử dụng cut

    cut -d ' ' --output-delimiter=$'\n' -f 1- example
    
  3. Sử dụng sed

    sed 's/ /\n/g' example
    
  4. Sử dụng perl

    perl -pe 's/ /\n/g' example
    
  5. Sử dụng vỏ

    foo=$(cat example); echo -e ${foo// /\\n}
    

seddụ tôi cần thêm a $để nhận bash để thay thế bằng một dòng mới thực sự, ví dụ:sed $'s/ /\\\n/g' example
acumartini

Ví dụ trên cho OSX sed, cho gnu-sed:sed $'s/ /\\n/g'
acumartini

16

Hãy thử lệnh dưới đây

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

HOẶC LÀ

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

Thí dụ:

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

Giải trình:

RS (Record seperator) là biến awk tích hợp. Trong lệnh đầu tiên, giá trị được cung cấp cho biến Dấu phân cách là không gian. Vì vậy, awk phá vỡ dòng in bất cứ khi nào nó tìm thấy một không gian.

Trong lệnh thứ hai, giá trị được cung cấp cho biến RS là khoảng trắng hoặc ký tự dòng mới. Lệnh này sẽ loại bỏ dòng trống thừa xuất hiện trong khi chạy lệnh đầu tiên.


8

Bạn có thể sử dụng xargs,

cat example | xargs -n 1

hoặc tốt hơn

xargs -n 1 < example

6
xargs -n 1 < examplecứu bạn 1 chú mèo con
Rinzwind

2

Sử dụng một perloneliner:

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

Nó sẽ thay thế khoảng trắng và tab bằng "ENTER" (aka \n)


1

Không ai đăng trăn, vì vậy đây là:

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

Chúng tôi chuyển hướng tập tin đầu vào vào pythonluồng stdin và đọc từng dòng một. Mỗi dòng được loại bỏ dòng mới, chia thành các từ và sau đó nối lại thành một chuỗi trong đó mỗi từ được phân tách bằng dòng mới. Điều này được thực hiện để đảm bảo có một từ trên mỗi dòng và tránh chèn nhiều dòng mới trong trường hợp có nhiều khoảng trắng bên cạnh lẫn nhau. Cuối cùng, chúng tôi kết thúc với danh sách các chuỗi, sau đó lại được nối thành chuỗi lớn hơn và được in ra luồng phát ra. Điều đó sau đó có thể được chuyển hướng đến một tập tin khác với > out.txt chuyển hướng.


0

Tương tự như 'tr' ở trên nhưng với các bổ sung:

  • Cũng hoạt động cho các tab

  • Chuyển đổi nhiều khoảng trắng hoặc tab thành 1 dòng mới

    tr -s '[:space:]' '\n' < example
    
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.