Android

Lệnh Tr trong linux với các ví dụ

[UNIX] Những thông tin gì thể hiện trên terminal?

[UNIX] Những thông tin gì thể hiện trên terminal?

Mục lục:

Anonim

tr là một tiện ích dòng lệnh trong các hệ thống Linux và Unix có thể dịch, xóa và ép các ký tự từ đầu vào tiêu chuẩn và ghi kết quả vào đầu ra tiêu chuẩn.

Lệnh tr có thể thực hiện các hoạt động như xóa các ký tự lặp lại, chuyển đổi chữ hoa thành chữ thường và thay thế và xóa ký tự cơ bản. Thông thường, nó được sử dụng kết hợp với các lệnh khác thông qua đường ống.

Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách sử dụng lệnh tr thông qua các ví dụ thực tế và giải thích chi tiết về các tùy chọn phổ biến nhất.

Cách sử dụng lệnh tr

Cú pháp của lệnh tr như sau:

tr OPTION… SET1

tr chấp nhận hai bộ ký tự, thường có cùng độ dài và thay thế các ký tự của bộ thứ nhất bằng các ký tự tương ứng từ bộ thứ hai.

Một SET về cơ bản là một chuỗi các ký tự, bao gồm các ký tự thoát dấu gạch chéo ngược đặc biệt.

Trong ví dụ sau, tr sẽ thay thế tất cả các ký tự từ đầu vào tiêu chuẩn (linuxize), bằng cách ánh xạ các ký tự từ bộ đầu tiên bằng các ký tự khớp từ bộ thứ hai.

echo 'linuxize' | tr 'lin' 'red'

Mỗi lần xuất hiện của l được thay thế bằng r , i bằng e n bằng d :

reduxeze

Các bộ ký tự cũng có thể được xác định bằng cách sử dụng phạm vi ký tự. Ví dụ: thay vì viết:

echo 'linuxize' | tr 'lmno' 'wxyz'

bạn có thể dùng:

echo 'linuxize' | tr 'ln' 'w-z'

Khi tùy chọn -c ( --complement ) được sử dụng, tr sẽ thay thế tất cả các ký tự không có trong SET1.

Trong ví dụ bên dưới, tất cả các ký tự, ngoại trừ, li li, sẽ được thay thế bằng ký tự cuối cùng từ tập thứ hai:

echo 'linuxize' | tr -c 'li' 'xy'

liyyyiyyy

Như bạn có thể nhận thấy, đầu ra ở trên có một ký tự rõ ràng hơn đầu vào. Điều này là do lệnh echo in một ký tự dòng mới vô hình cũng được thay thế bằng y . Để lặp lại một chuỗi không có dòng mới, hãy sử dụng tùy chọn -n .

Tùy chọn -d ( --delete ) cho tr để xóa các ký tự được chỉ định trong SET1. Khi xóa các ký tự mà không ép, chỉ định một bộ.

Lệnh dưới đây sẽ loại bỏ các ký tự l , i z :

echo 'Linuxize' | tr -d 'liz'

Ký tự L không bị xóa vì đầu vào bao gồm chữ L viết hoa trong khi ký tự l trong SET là chữ thường.

Lnuxe

Tùy chọn -s ( --squeeze-repeats ) thay thế một chuỗi các lần xuất hiện lặp lại với bộ ký tự trong SET cuối cùng.

Trong ví dụ sau, tr loại bỏ các ký tự khoảng trắng lặp lại:

echo "GNU \ Linux" | tr -s ' '

GNU \ Linux

Khi SET2 được sử dụng, chuỗi ký tự được chỉ định trong SET1 được thay thế bằng SET2.

echo "GNU \ Linux" | tr -s ' ' '_'

GNU_\_Linux

Tùy chọn -t ( --truncate-set1 ) buộc tr cắt bớt SET1 theo chiều dài của SET2 trước khi xử lý thêm.

Theo mặc định, nếu SET1 lớn hơn SET2 tr sẽ sử dụng lại ký tự cuối cùng của SET2. Đây là một ví dụ:

echo 'Linux ize' | tr 'abcde' '12'

Đầu ra cho thấy ký tự e từ SET1 được khớp với ký tự mới nhất của SET2, là 2 :

Linux iz2

Bây giờ, sử dụng cùng một lệnh với tùy chọn -t :

echo 'Linux ize' | tr -t 'abcde' '12'

Linux ize

Bạn có thể thấy rằng ba ký tự cuối cùng của SET1 đã bị xóa. SET1 trở thành 'ab', cùng độ dài với SET2 và không có sự thay thế nào được thực hiện.

Kết hợp các tùy chọn

Lệnh tr cũng cho phép bạn kết hợp các tùy chọn của nó. Ví dụ: lệnh sau trước tiên thay thế tất cả các ký tự trừ i bằng 0 và sau đó nén 0 ký tự lặp lại:

echo 'Linux ize' | tr -cs 'i' '0'

0i0i0

Ví dụ lệnh Tr

Trong phần này, chúng tôi sẽ đề cập đến một vài ví dụ về cách sử dụng phổ biến của lệnh tr .

Chuyển đổi chữ thường thành chữ hoa

Chuyển đổi chữ thường thành chữ hoa hoặc chữ ngược là một trong những trường hợp sử dụng điển hình của lệnh tr . phù hợp với tất cả các ký tự chữ thường và phù hợp với tất cả các ký tự viết hoa.

echo 'Linuxize' | tr '' ''

LINUXIZE

Thay vì các lớp nhân vật, bạn cũng có thể sử dụng phạm vi:

echo 'Linuxize' | tr 'az' 'A-Z'

Để chuyển đổi chữ hoa thành chữ thường, chỉ cần chuyển vị trí của các bộ.

Xóa tất cả các ký tự không phải là số

Lệnh sau sẽ xóa tất cả các ký tự không phải là số:

echo "my phone is 123-456-7890" | tr -cd

là viết tắt của tất cả các ký tự chữ số và bằng cách sử dụng tùy chọn -c , lệnh sẽ xóa tất cả các ký tự không có chữ số. Đầu ra sẽ như thế này:

1234567890

Đặt mỗi từ vào một dòng mới

Để đặt từng từ vào một dòng mới, chúng ta cần khớp tất cả các ký tự không phải là chữ và số và thay thế chúng bằng một dòng mới:

echo 'GNU is an operating system' | tr -cs '' '\n'

GNU is an operating system

Xóa các dòng trống

Để xóa các dòng trống, chỉ cần nén các ký tự dòng mới lặp đi lặp lại:

tr -s '\n' < file.txt > new_file.txt

Trong lệnh trên, chúng tôi đang sử dụng biểu tượng chuyển hướng < để truyền nội dung của file.txt vào lệnh tr . Chuyển hướng > ghi đầu ra của lệnh vào new_file.txt .

In các thư $PATH trên một dòng riêng biệt

Biến môi trường $PATH là một danh sách các thư mục được phân tách bằng dấu hai chấm cho shell biết thư mục nào cần tìm kiếm các tệp thực thi khi bạn gõ lệnh.

Để in mỗi thư mục trên một dòng riêng biệt, chúng ta cần khớp dấu hai chấm (:) và thay thế nó bằng dòng mới:

echo $PATH | tr ':' '\n'

/usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin

Phần kết luận

tr là một lệnh để dịch hoặc xóa các ký tự.

Mặc dù rất hữu ích, tr có thể hoạt động với các ký tự đơn. Để khớp mẫu phức tạp hơn và thao tác chuỗi, bạn nên sử dụng sed hoặc awk .

thiết bị đầu cuối tr