Làm thế nào để bạn cắt dấu phân cách?

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át

Ghi 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ứ M

Ví 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	epsilon
0

kết quả nào sau đây

one	two	three	four	five
alpha	beta	gamma	delta	epsilon
1

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	epsilon
2

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	epsilon
1

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	epsilon
4

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

  1. tên tài khoản
  2. Mật khẩu [hiển thị là x nếu được mã hóa]
  3. Số ID người dùng hoặc UID
  4. Số ID nhóm hoặc GID
  5. Trường nhận xét [được sử dụng bởi lệnh ngón tay]
  6. thư mục nhà
  7. 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	epsilon
5

đầu ra nào, ví dụ

one	two	three	four	five
alpha	beta	gamma	delta	epsilon
6

[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	epsilon
7

mà đầu ra như sau, ví dụ

one	two	three	four	five
alpha	beta	gamma	delta	epsilon
8

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	epsilon
9
cut -f 3 data.txt
0

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.txt
1

đầu ra như sau, ví dụ

cut -f 3 data.txt
2

ví dụ

cut -f 3 data.txt
3

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.txt
4

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.txt
5

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.txt
6

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.txt
7

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.txt
8

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

Chủ Đề