Đôi khi, bạn có thể cần phải xóa các ký tự khỏi một chuỗi. Bất kể lý do là gì, Linux cung cấp cho bạn nhiều công cụ tiện dụng, được tích hợp sẵn cho phép bạn xóa các ký tự khỏi một chuỗi trong Bash. Bài viết này hướng dẫn bạn cách sử dụng các công cụ đó để xóa các ký tự khỏi một chuỗi.
Bài viết trình bày cách thực hiện như sau:
- Xóa ký tự khỏi chuỗi bằng sed
- Xóa ký tự khỏi chuỗi bằng awk
- Xóa ký tự khỏi chuỗi bằng cách sử dụng cắt
- Xóa ký tự khỏi chuỗi bằng cách sử dụng tr
Các lệnh hiển thị trong bài viết này được thực hiện trong Ubuntu 20.04 Focal Fossa. Các lệnh tương tự cũng có thể được thực hiện trên các bản phân phối Linux khác có sẵn các công cụ trên. Chúng tôi sẽ sử dụng ứng dụng Terminal mặc định để chạy các lệnh. Bạn có thể truy cập ứng dụng Terminal bằng phím tắt Ctrl + Alt + T.
Xóa các ký tự khỏi chuỗi bằng cách sử dụng sed
Sed là một tiện ích mạnh mẽ và tiện dụng được sử dụng để chỉnh sửa các luồng văn bản. Nó là một trình soạn thảo văn bản không tương tác cho phép bạn thực hiện các thao tác văn bản cơ bản trên các luồng đầu vào. Bạn cũng có thể sử dụng sed để loại bỏ các ký tự không mong muốn khỏi chuỗi.
Đối với mục đích trình diễn, chúng tôi sẽ sử dụng một chuỗi mẫu và sau đó chuyển nó vào lệnh sed.
Xóa ký tự cụ thể khỏi chuỗi
Sử dụng sed, bạn có thể xóa một ký tự cụ thể khỏi một chuỗi. Ví dụ: để xóa h khỏi chuỗi xin chào, bạn khỏe không? lệnh sẽ là:
$quăng đi 'xin chào, bạn khỏe không?' | quyến rũ 'NS//'Điều này sẽ chỉ xóa lần xuất hiện đầu tiên của ‘h’ trong chuỗi.
Để xóa tất cả các lần xuất hiện của ‘h’ khỏi chuỗi, hãy sử dụng lệnh sau:
$quăng đi 'xin chào, bạn khỏe không?' | quyến rũ 's / h // g'
Ở đâu NS viết tắt của toàn cầu. Nó sẽ loại bỏ tất cả các lần xuất hiện của ‘h’ trong chuỗi.
Xóa ký tự đầu tiên khỏi chuỗi
Để xóa ký tự đầu tiên khỏi chuỗi xin chào, bạn khỏe không? lệnh sẽ là:
$quăng đi 'xin chào, bạn khỏe không?' | quyến rũ 's /^.//' tập tinTrong đó (.) Khớp chính xác với một ký tự và (^) khớp với bất kỳ ký tự nào ở đầu chuỗi.
Xóa ký tự cuối cùng khỏi chuỗi
Để xóa ký tự cuối cùng khỏi chuỗi xin chào, bạn khỏe không? lệnh sẽ là:
$quăng đi 'xin chào, bạn khỏe không?' | quyến rũ 's /.$//'Ở đâu ( . ) khớp chính xác với một ký tự và ($) khớp với bất kỳ ký tự nào ở cuối chuỗi.
Xóa ký tự đầu tiên và cuối cùng khỏi chuỗi
Để xóa ký tự đầu tiên và ký tự cuối cùng khỏi chuỗi xin chào, bạn khỏe không? lệnh sẽ là:
$quăng đi 'xin chào, bạn khỏe không?' | quyến rũ 's /^.//; s /.$//'
Xóa các ký tự khỏi chuỗi bằng awk
Awk là một ngôn ngữ kịch bản mạnh mẽ được sử dụng để đối sánh mẫu, cùng với xử lý văn bản. Awk cho phép bạn lọc và chuyển đổi văn bản theo nhiều cách khác nhau. Bạn cũng có thể sử dụng awk để xóa các ký tự khỏi chuỗi.
Đối với mục đích trình diễn, chúng tôi sẽ sử dụng một chuỗi mẫu và sau đó chuyển nó vào lệnh awk.
Xóa ký tự đầu tiên khỏi chuỗi
Để xóa ký tự đầu tiên khỏi chuỗi xin chào, bạn khỏe không? lệnh sẽ là:
$quăng đi 'xin chào, bạn khỏe không?' | awk '{print substr ($ 0, 2)}'Trong đó ($ 0) là toàn bộ chuỗi mục tiêu và (2) là vị trí bắt đầu ký tự. Lệnh trên xóa ký tự đầu tiên, ký tự ‘h,’ số ký tự ‘1’ và trả về chuỗi đích bắt đầu bằng ký tự thứ hai, ‘e.’
Xóa hai ký tự đầu tiên khỏi chuỗi
Bạn cũng có thể xóa một số ký tự cụ thể khỏi đầu chuỗi. Ví dụ: để xóa hai ký tự đầu tiên khỏi chuỗi xin chào, bạn khỏe không? lệnh sẽ là:
$quăng đi 'xin chào, bạn khỏe không?' | awk '{print substr ($ 0, 3)}'Lệnh trên sẽ xóa hai ký tự đầu tiên, ‘he,’ hoặc ký tự số ‘1 và 2’ và trả về chuỗi mục tiêu bắt đầu bằng ký tự số ‘3’ hoặc ‘l.’
Xóa ký tự cuối cùng khỏi chuỗi
Để xóa ký tự cuối cùng khỏi xin chào, bạn khỏe không? lệnh sẽ là:
$quăng đi 'xin chào, bạn khỏe không?' | awk '{print substr ($ 0, 1, length ($ 0) -1)}'Ở đâu chiều dài ($ 0) -1 có nghĩa là khấu trừ ‘ 1 'Từ tổng độ dài ký tự.
Lệnh trên sẽ in ra chuỗi bắt đầu bằng ký tự số ‘ 1 ' lên đến chiều dài ($ 0) -1 để loại bỏ ký tự cuối cùng.
Có ' 19 Ký tự ’(bao gồm cả dấu cách) trong chuỗi trên. Lệnh sẽ hoạt động bằng cách in tất cả các ký tự, bắt đầu bằng ký tự ‘ 1 'Và lên đến ký tự' 18 , 'Trong khi xóa ký tự cuối cùng' 19 . '
Xóa hai ký tự cuối cùng khỏi chuỗi
Để xóa hai ký tự cuối cùng khỏi xin chào, bạn khỏe không? lệnh sẽ là:
$quăng đi 'xin chào, bạn khỏe không?' | awk '{print substr ($ 0, 1, length ($ 0) -2)}'Ở đâu chiều dài ($ 0) -2 có nghĩa là khấu trừ ‘ 2 'Từ tổng độ dài ký tự.
Lệnh trên sẽ in ra chuỗi, bắt đầu bằng ký tự số ‘ 1 'Và lên đến số ký tự' chiều dài ($ 0) -2 , 'Để xóa hai ký tự cuối cùng trong chuỗi.
Xóa cả ký tự đầu tiên và ký tự cuối cùng khỏi chuỗi
Để xóa cả ký tự đầu tiên và ký tự cuối cùng khỏi chuỗi xin chào, bạn khỏe không? lệnh sẽ là:
$quăng đi 'xin chào, bạn khỏe không?' | awk '{print substr ($ 0, 2, length ($ 0) - 2)}'Ở đâu chiều dài ($ 0) -2 có nghĩa là khấu trừ ‘ 2 'Từ tổng độ dài ký tự.
Lệnh trên sẽ in ra chuỗi, bắt đầu bằng ký tự số ‘ 2 'Lên đến số ký tự' chiều dài ($ 0) -2 , 'Để xóa ký tự đầu tiên và cuối cùng.
Xóa ký tự khỏi chuỗi bằng cách sử dụng cắt
Cut là một công cụ dòng lệnh thường được sử dụng để trích xuất một phần văn bản từ chuỗi hoặc tệp và in kết quả ra đầu ra tiêu chuẩn. Bạn cũng có thể sử dụng lệnh này để xóa các ký tự khỏi một chuỗi.
Đối với mục đích trình diễn, chúng tôi sẽ sử dụng một chuỗi mẫu và sau đó chuyển nó vào lệnh cắt.
Xóa ký tự đầu tiên khỏi chuỗi
Để xóa ký tự đầu tiên khỏi chuỗi, xin chào, bạn khỏe không? lệnh sẽ là:
$quăng đi 'xin chào, bạn khỏe không?' | cắt -NS 2-Lệnh này sẽ in chuỗi, bắt đầu bằng ký tự thứ hai, đồng thời xóa ký tự đầu tiên.
Xóa bốn ký tự đầu tiên khỏi chuỗi
Để xóa bốn ký tự đầu tiên khỏi chuỗi xin chào, bạn khỏe không? lệnh sẽ là:
$quăng đi 'xin chào, bạn khỏe không?' | cắt -NS 5-Lệnh này sẽ in chuỗi, bắt đầu từ ký tự thứ năm, đồng thời xóa bốn ký tự đầu tiên.
In chuỗi giữa các ký tự thứ 2 và thứ 5
Để in chuỗi xin chào, bạn khỏe không? giữa ký tự thứ hai và thứ năm , lệnh sẽ là:
$quăng đi 'xin chào, bạn khỏe không?' | cắt -NS 2-5Lệnh này sẽ in chuỗi, bắt đầu từ ký tự thứ hai và đến ký tự thứ năm, đồng thời xóa các ký tự đầu và ký tự kết thúc còn lại.
Xóa ký tự cuối cùng khỏi chuỗi
Để xóa ký tự cuối cùng khỏi chuỗi xin chào, bạn khỏe không? sử dụng cắt ra lệnh với vòng quay , như sau:
$quăng đi 'xin chào, bạn khỏe không?' | vòng quay | cắt -c2- | vòng quayLệnh này hoạt động bằng cách đảo ngược chuỗi đầu tiên, sau đó cắt ký tự đầu tiên và cuối cùng đảo ngược lại để cung cấp cho bạn đầu ra mong muốn.
Xóa bốn ký tự cuối cùng khỏi chuỗi
Để xóa bốn ký tự cuối cùng khỏi dòng xin chào, bạn khỏe không? lệnh sẽ là:
$quăng đi 'xin chào, bạn khỏe không?' | vòng quay | cắt -c5- | vòng quayLệnh này hoạt động bằng cách đảo ngược chuỗi đầu tiên, sau đó cắt bốn ký tự đầu tiên, sau đó đảo ngược lại để cung cấp cho bạn đầu ra mong muốn.
Xóa các ký tự đầu tiên và cuối cùng khỏi chuỗi
Để xóa các ký tự đầu tiên và cuối cùng khỏi chuỗi xin chào, bạn khỏe không? sử dụng cắt ra lệnh với vòng quay , như sau:
$quăng đi 'Chào thế giới!' | cắt -c2- | vòng quay | cắt -c2- |vòng quayLệnh này hoạt động bằng cách cắt ký tự đầu tiên, sau đó đảo ngược chuỗi và cắt ký tự đầu tiên của nó, sau đó đảo ngược lại để cung cấp cho bạn đầu ra mong muốn.
Xóa ký tự khỏi chuỗi bằng cách sử dụng tr
Lệnh tr (viết tắt của translate) được sử dụng để dịch, bóp và xóa các ký tự khỏi một chuỗi. Bạn cũng có thể sử dụng tr để xóa các ký tự khỏi một chuỗi.
Đối với mục đích trình diễn, chúng tôi sẽ sử dụng một chuỗi mẫu và sau đó chuyển nó vào lệnh tr.
Loại bỏ tất cả sự xuất hiện của nhân vật
Sử dụng lệnh tr, bạn có thể xóa tất cả các lần xuất hiện của ký tự viết thường hoặc viết hoa khỏi chuỗi của mình. Ví dụ: để xóa tất cả các lần xuất hiện của ký tự viết thường ‘h’ khỏi chuỗi, lệnh sẽ là:
$quăng đi 'Xin chào, bạn khỏe không?' | tr -NSNS
Tương tự, để xóa tất cả các lần xuất hiện của ký tự viết hoa ‘H’ khỏi chuỗi, lệnh sẽ là:
$quăng đi 'Xin chào, bạn khỏe không?' | tr -NSNSBạn cũng có thể sử dụng trình tự đã diễn giải để loại bỏ các chữ thường hoặc chữ hoa:
$quăng đi 'Xin chào, bạn khỏe không?'| tr -NS [:phía trên:]$quăng đi 'Xin chào, bạn khỏe không?'| tr -NS [:thấp hơn:]
Loại bỏ tất cả sự xuất hiện của các ký tự chữ thường và chữ hoa
Bạn cũng có thể xóa tất cả các lần xuất hiện của cả ký tự viết thường và viết hoa khỏi một chuỗi. Ví dụ: lệnh sau sẽ xóa tất cả các lần xuất hiện của ký tự ‘h’, cả chữ thường và chữ hoa.
$quăng đi 'Xin chào, bạn khỏe không?' | tr -NS‘HH’
Loại bỏ tất cả sự xuất hiện của các ký tự trong một phạm vi cụ thể
Để xóa tất cả các lần xuất hiện của các ký tự khỏi một chuỗi trong phạm vi cụ thể ‘d-h’, lệnh sẽ là:
$quăng đi 'xin chào, bạn khỏe không?' | tr -NS 'd-h'Lệnh này sẽ xóa tất cả các ký tự trong phạm vi ‘d-h’ (d, e, f, g, h) trong chuỗi.
Phần kết luận
Trong Linux, sẽ luôn có nhiều cách để hoàn thành một công việc đơn giản. Điều này cũng đúng với việc xóa các ký tự khỏi một chuỗi. Bài viết này đã chỉ cho bạn bốn cách khác nhau để làm như vậy, cùng với một số ví dụ để xóa các ký tự không mong muốn khỏi một chuỗi. Quyết định sử dụng công cụ nào phụ thuộc vào sở thích của bạn và quan trọng hơn là vào những gì bạn muốn đạt được.