'Mèo' được dùng để làm gì?


13

Tôi đã thấy lệnh mèo xuất hiện trong một số nội dung trực tuyến và tôi tò mò catkhông biết mình đã làm gì và làm gì trong bối cảnh ai đó chỉ đang làm một số công cụ dòng lệnh đơn giản.

Câu trả lời:


12

catMục đích chính của con mèo là tập tin con mèo . cat file1 file2 ...sẽ hiển thị các nội dung của file, file2và những người khác một sau khi khác, như thể các nội dung là trong một tập tin duy nhất. Xem trang hướng dẫn :

NAME
       cat - concatenate and print files

Nó có nghĩa là để sử dụng trong đó:

  • một lệnh đích không thể đọc từ các tệp và bạn cần truyền nhiều tệp cho nó. Một ví dụ là trtiện ích. Thông thường, với một tệp, bạn sẽ làm:

    tr < file
    

    Nhưng với nhiều tệp, chuyển hướng không thể được sử dụng, vì vậy bạn phải làm:

    cat file1 file2 ... | tr
    
  • một lệnh đích có thể đọc từ nhiều tệp, nhưng hành vi của nó có thể thay đổi khi được cung cấp nhiều tệp. Một ví dụ là wc, in số đếm cho mỗi tệp, cùng với tên tệp, nơi bạn có thể muốn chỉ là tổng số, không có tên tệp.

Hãy nhớ rằng hầu hết các lệnh bạn gặp ( grep, sed, awk, sort, ...) có thể đọc các tập tin hoàn toàn tốt đẹp.

Nếu bạn muốn xem nội dung của tệp, hãy sử dụng máy nhắn tin - lessmorecả hai đều có khả năng trình bày các tệp để xem và thuận tiện hơn rất nhiều khi sử dụng.


Chuyển hướng rất có thể được sử dụng với nhiều tệp vì bạn có thể kết hợp nó với thay thế quy trình và lệnh: < <(cat file[12]) trcũng như <<<$(cat file[12]) trcả hai cách hoàn toàn hợp lệ để chuyển hướng nhiều tệp. Tất nhiên bạn cũng cần catđiều đó, chỉ là đường ống không phải là cách duy nhất.
tráng miệng

@dPlay nếu bạn phải là người phạm tội, việc chuyển hướng đó vẫn chỉ sử dụng một tệp duy nhất - tệp đại diện cho thiết bị xuất chuẩn của lệnh (hoặc stdin, nếu ngược lại). Bash không hỗ trợ chuyển hướng đa tập tin thực sự như zsh.
muru

9

catlà một trong những lệnh được sử dụng thường xuyên nhất trên các hệ điều hành giống Unix. Nó có ba chức năng liên quan đến các tệp văn bản:

  1. hiển thị chúng
  2. kết hợp các bản sao của chúng
  3. tạo ra cái mới.
  4. Sao chép tập tin

Cú pháp chung của mèo là:

cat [options] [filenames] [-] [filenames]

Đọc tập tin

Việc sử dụng phổ biến nhất của mèo là đọc nội dung của các tệp và mèo thường là chương trình thuận tiện nhất cho mục đích này. Tất cả những gì cần thiết để mở tệp văn bản để xem trên màn hình hiển thị là nhập từ mèo theo sau là khoảng trắng và tên của tệp rồi nhấn phím ENTER. Ví dụ: phần sau đây sẽ hiển thị nội dung của tệp có tên file1:

cat file1

Ghép

Vai trò thứ hai của mèo là nối. (Đây là nguồn gốc của tên tò mò của mèo.) Không có hiệu lực trên các tệp gốc.

Ví dụ: lệnh sau sẽ ghép các bản sao nội dung của ba tệp file1, file2 và file3:

cat file1 file2 file3

Nội dung của từng tập tin sẽ được hiển thị trên màn hình điều khiển. Đầu ra này có thể dễ dàng được chuyển hướng bằng cách sử dụng toán tử chuyển hướng đầu ra sang một tệp khác, chẳng hạn như tệp4, bằng cách sử dụng như sau:

cat file1 file2 file3 > file4

Tạo tập tin

Nhờ nhận xét @muru : mèo có khả năng tạo các tệp mới tùy thuộc vào tính năng chuyển hướng vỏ chứ không phải chính nó

Đối với các tệp nhỏ, việc này thường dễ hơn sử dụng vi, gedit hoặc các trình soạn thảo văn bản khác. Nó được thực hiện bằng cách gõ cat theo sau là toán tử chuyển hướng đầu ra và tên của tệp sẽ được tạo, sau đó nhấn ENTERvà cuối cùng nhấn phím Ctrl& d.

Ví dụ: một tệp mới có tên file1 có thể được tạo bằng cách nhập

cat > file1

sau đó nhấn ENTERvà đồng thời nhấn phím Ctrl& d.

PS1: Nếu một tệp có tên file1 đã tồn tại, nó sẽ bị ghi đè

PS2: bạn có thể chắp thêm vào tệp đã thoát bằng cách sử dụng >>ví dụ toán tử cat >> file1

Sao chép tập tin

Lệnh cat cũng có thể được sử dụng ( tùy thuộc vào tính năng chuyển hướng shell) để tạo một tệp mới và chuyển đến dữ liệu từ một tệp hiện có. Ví dụ: tạo một bản sao của tệp oldfile.txt:

cat oldfile.txt > newfile.txt

Người giới thiệu:


1
Re 3: catkhông tạo các tệp đó - shell là khi bạn sử dụng chuyển hướng. Bạn có thể đã làm tốt như vậy echo foo > file1.
muru

@muru Bạn hoàn toàn đúng, nhưng nó vẫn sử dụng lệnh mèo
Maythux

1
Không, không phải vậy. Bạn đang quy cho catnhững gì thực sự được thực hiện bởi một cái gì đó khác. Ví dụ, làm less file1 > file2( grep '.*' file1 > filehoặc awk 1 file1 > file2hoặc ...) có tác dụng tương tự. Ditto cho 4. Đây chỉ là lạm dụng.
muru

Tôi biết tôi có thể sử dụng nó > filevà đưa ra kết quả tương tự, nhưng tôi không thể coi nó hợp lệ để làm điều đó với mèo?!
Maythux

1
Bạn có thể, nếu bạn chỉ định rằng catkhông tạo tệp. Nói cattạo hoặc sao chép các tập tin chỉ là sai.
muru

1

Nó có thể được sử dụng để hiển thị nội dung của một tập tin. Vd : cat "my file.txt". Bạn cũng có thể làm man catđể cho bạn thấy các chi tiết về những gì catcó thể được sử dụng cho.


0

Đây là một cách khác để tạo tập tin bằng cách sử dụng chuyển hướng shell (hoặc đường ống) và cat:

cat << EOF > foo.sh
#!/bin/sh
echo 'Hello World!'
EOF

cat << EOFsẽ xuất các dòng sau cho đến khi EOFgặp lại chuỗi . Sau đó >( >>) sẽ chuyển hướng đầu ra vào tệp foo.sh. Ngoài ra, nếu bạn cần tạo một tệp dưới dạng root, bạn có thể dẫn đầu ra tới lệnh tee( tee -a), được thực hiện bằng lệnh sudo:

cat << EOF | sudo tee foo.sh && sudo chmod +x foo.sh
#!/bin/sh
HELLO='Hello World!'
echo "\$HELLO"
EOF
  • Ở trên sẽ làm cho tập tin thực thi ( chmod +x) nếu nó được tạo thành công ( &&).
  • Ý nghĩa đặc biệt của một số ký tự (as $) nên được thoát (với \) trong đầu ra của cat.
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.