Trên các hệ điều hành giống Unix, lệnh cắt sẽ loại bỏ ["cắt bỏ"] các phần của từng dòng của tệp hoặc tệp
Trang này trình bày phiên bản GNU/Linux của cut
- Lệnh Linux trợ giúp
cú pháp
cut OPTION.. [FILE]...
Tùy chọn
-b, --bytes=LISTChỉ chọn các byte từ mỗi dòng như được chỉ định trong LIST. DANH SÁCH chỉ định một byte, một tập hợp các byte hoặc một phạm vi byte; . -c, --characters=LISTChỉ chọn các ký tự từ mỗi dòng như được chỉ định trong LIST. DANH SÁCH chỉ định một ký tự, một bộ ký tự hoặc một dải ký tự; . -d, --delimiter=DELIMSử dụng ký tự DELIM thay vì tab cho dấu phân cách trường. -f, --fields=LISTChỉ chọn những trường này trên mỗi dòng; . DANH SÁCH chỉ định một trường, một tập hợp các trường hoặc một dải trường; . -nTùy chọn này bị bỏ qua, nhưng được bao gồm vì lý do tương thích. --complementBổ sung tập hợp các byte, ký tự hoặc trường đã chọn. -s, --only-delimitedKhông in các dòng không chứa dấu phân cách. --output-delimiter=STRINGSử dụng STRING làm chuỗi dấu phân cách đầu ra. Mặc định là sử dụng dấu phân cách đầu vào. --helpHiển thị thông báo trợ giúp và thoát. --versionXuất thông tin phiên bản và thoátGhi chú sử dụng
Khi gọi cut, hãy sử dụng tùy chọn -b, -c hoặc -f, nhưng chỉ một trong số chúng
Nếu không có TẬP TIN nào được chỉ định, hãy cắt các lần đọc từ đầu vào tiêu chuẩn
Chỉ định DANH SÁCH
Mỗi DANH SÁCH được tạo thành từ một số nguyên, một dải số nguyên hoặc nhiều dải số nguyên được phân tách bằng dấu phẩy. Đầu vào đã chọn được ghi theo cùng thứ tự mà nó được đọc và được ghi vào đầu ra chính xác một lần. Một phạm vi bao gồm
Byte, ký tự hoặc trường thứ N, được tính từ 1. N-Từ byte, ký tự hoặc trường thứ N đến cuối dòng. N-MTừ byte, ký tự hoặc trường thứ N đến thứ M [bao gồm]. -MTừ byte đầu tiên đến byte, ký tự hoặc trường thứ MVí dụ: giả sử bạn có một tệp có tên data. txt chứa văn bản sau
one two three four five alpha beta gamma delta epsilon
Trong ví dụ này, mỗi từ này được phân tách bằng ký tự tab, không phải dấu cách. Ký tự tab là dấu phân cách mặc định của phần cắt, do đó, theo mặc định, nó coi một trường là bất kỳ thứ gì được phân tách bằng tab
Để chỉ "cắt" trường thứ ba của mỗi dòng, hãy sử dụng lệnh
cut -f 3 data.txt
kết quả nào sau đây
three gamma
Thay vào đó, nếu bạn chỉ muốn "cắt" trường thứ hai đến thứ tư của mỗi dòng, hãy sử dụng lệnh
cut -f 2-4 data.txt
kết quả nào sau đây
two three four beta gamma delta
Nếu bạn chỉ muốn "cắt" trường thứ nhất đến thứ hai và thứ tư đến thứ năm của mỗi dòng [bỏ qua trường thứ ba], hãy sử dụng lệnh
cut -f 1-2,4-5 data.txt
kết quả nào sau đây
one two four five alpha beta delta epsilon
Hoặc, giả sử bạn muốn trường thứ ba và mọi trường sau đó, bỏ qua hai trường đầu tiên. Trong trường hợp này, bạn có thể sử dụng lệnh
________số 8_______kết quả nào sau đây
three four five gamma delta epsilon
Chỉ định phạm vi với LIST cũng áp dụng để cắt các ký tự [-c] hoặc byte [-b] khỏi một dòng. Ví dụ: để chỉ xuất ký tự thứ ba đến thứ mười hai của mọi dòng dữ liệu. txt, sử dụng lệnh
one two three four five alpha beta gamma delta epsilon0
kết quả nào sau đây
one two three four five alpha beta gamma delta epsilon1
Hãy nhớ rằng "khoảng cách" giữa mỗi từ thực sự là một ký tự tab, vì vậy cả hai dòng đầu ra đều hiển thị mười ký tự. tám ký tự chữ và số và hai ký tự tab. Nói cách khác, cắt đang bỏ qua hai ký tự đầu tiên của mỗi dòng, tính các tab là một ký tự;
Đếm byte thay vì ký tự dẫn đến kết quả đầu ra giống nhau trong trường hợp này, bởi vì trong tệp văn bản được mã hóa ASCII, mỗi ký tự được biểu thị bằng một byte [tám bit] dữ liệu. Vì vậy, lệnh
one two three four five alpha beta gamma delta epsilon2
cho dữ liệu tập tin của chúng tôi. txt, tạo ra cùng một đầu ra
one two three four five alpha beta gamma delta epsilon1
Chỉ Định Một Dấu Phân Cách Khác Với Tab
Ký tự tab là dấu phân cách mặc định được sử dụng để xác định những gì cấu thành một trường. Vì vậy, nếu các trường trong tệp của bạn đã được phân tách bằng tab, thì bạn không cần chỉ định một ký tự phân cách khác
Tuy nhiên, bạn có thể chỉ định bất kỳ ký tự nào làm dấu phân cách. Chẳng hạn, tệp /etc/passwd chứa thông tin về từng người dùng trên hệ thống, một người dùng trên mỗi dòng và mỗi trường thông tin được phân tách bằng dấu hai chấm [". "]. Ví dụ: dòng /etc/passwd cho người dùng root có thể trông như thế này
one two three four five alpha beta gamma delta epsilon4
Các trường này chứa thông tin sau, theo thứ tự sau, được phân tách bằng ký tự dấu hai chấm
- tên tài khoản
- Mật khẩu [hiển thị là x nếu được mã hóa]
- Số ID người dùng hoặc UID
- Số ID nhóm hoặc GID
- Trường nhận xét [được sử dụng bởi lệnh ngón tay]
- thư mục nhà
- Vỏ bọc
Tên người dùng là trường đầu tiên trên dòng, vì vậy để hiển thị từng tên người dùng trên hệ thống, hãy sử dụng lệnh
one two three four five alpha beta gamma delta epsilon5
đầu ra nào, ví dụ
one two three four five alpha beta gamma delta epsilon6
[Có nhiều tài khoản người dùng hơn trên một hệ thống thông thường, bao gồm nhiều tài khoản dành riêng cho các dịch vụ hệ thống, nhưng trong ví dụ này, chúng tôi giả sử chỉ có năm người dùng. ]
Trường thứ ba của mỗi dòng trong tệp /etc/passwd là UID [số ID người dùng], vì vậy để hiển thị từng tên người dùng và số ID người dùng, hãy sử dụng lệnh
one two three four five alpha beta gamma delta epsilon7
mà đầu ra như sau, ví dụ
one two three four five alpha beta gamma delta epsilon8
Như bạn có thể thấy, theo mặc định, đầu ra được phân tách bằng cách sử dụng cùng một ký tự phân cách được chỉ định cho đầu vào. Trong trường hợp này, đó là ký tự dấu hai chấm [". "]. Tuy nhiên, bạn có thể chỉ định một dấu phân cách khác cho đầu vào và đầu ra. Vì vậy, nếu bạn muốn chạy lệnh trước đó, nhưng đầu ra được phân tách bằng dấu cách, bạn có thể sử dụng lệnh
one two three four five alpha beta gamma delta epsilon9
cut -f 3 data.txt0
Nhưng nếu bạn muốn đầu ra được phân định bằng một tab thì sao? . Để chỉ định nó trên dòng lệnh, bạn phải "bảo vệ" nó khỏi trình bao. Điều này được thực hiện khác nhau tùy thuộc vào trình bao bạn đang sử dụng, nhưng trong trình bao mặc định của Linux [bash], bạn có thể chỉ định ký tự tab bằng $'\t'. Vì vậy, lệnh
cut -f 3 data.txt1
đầu ra như sau, ví dụ
cut -f 3 data.txt2
ví dụ
cut -f 3 data.txt3
Xuất ký tự thứ ba của mỗi dòng của tệp tệp. txt, bỏ qua những cái khác
cut -f 3 data.txt4
Xuất ba ký tự đầu tiên của mỗi dòng của tệp tệp. txt, bỏ qua phần còn lại
cut -f 3 data.txt5
Tương tự như lệnh trên. Xuất ba ký tự đầu tiên của mỗi dòng tệp. txt
cut -f 3 data.txt6
Xuất ký tự thứ ba đến ký tự cuối cùng của mỗi dòng của tệp tệp. txt, bỏ qua hai ký tự đầu tiên
cut -f 3 data.txt7
Xuất trường đầu tiên của tệp /etc/passwd, trong đó các trường được phân tách bằng dấu hai chấm ['. ']. Trường đầu tiên của /etc/passwd là tên người dùng, vì vậy lệnh này xuất mọi tên người dùng trong tệp passwd
cut -f 3 data.txt8
Xuất trường thứ nhất và thứ sáu, được phân tách bằng dấu hai chấm, của bất kỳ mục nhập nào trong tệp /etc/passwd chỉ định /bin/bash làm trình bao đăng nhập. Lệnh này xuất tên người dùng và thư mục chính của bất kỳ người dùng nào có trình bao đăng nhập là /bin/bash