Xóa các ký tự khỏi chuỗi trong Bash

Removing Characters From String Bash



Đô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 ký tự cụ thể khỏi chuỗi1
Để 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ự cụ thể khỏi chuỗi2

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 tin

Trong đó (.) 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ự đầu tiên khỏi 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ự cuối cùng khỏ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 ký tự đầu tiên và cuối cùng khỏi chuỗi

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 ký tự đầu tiên khỏi chuỗi

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 hai ký tự đầu tiên khỏi chuỗi

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

rmv chuỗi char frm cuối cùng

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 hai 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

Để 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 cả ký tự đầu tiên và ký tự cuối cùng khỏi chuỗi

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.
rmv cut -c

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.
Xóa bốn ký tự đầu tiên khỏi chuỗi

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

Lệ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.
rmv thứ 2 và thứ 5 c2

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 quay

Lệ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.
02 Xóa ký tự cuối cùng khỏi chuỗi

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 quay

Lệ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.
rmv bốn ký tự cuối cùng

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 quay

Lệ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.
rmv đầu tiên và cuối cùng

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

loại bỏ tất cả các lần xuất hiện 01

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 -NSNS

Bạ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:]

khả năng xảy ra thấp hơn

$quăng đi 'Xin chào, bạn khỏe không?'| tr -NS [:thấp hơn:]

khả năng xảy ra trê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’

xuất hiện trên và dưới

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.
xảy ra phạm vi cụ thể

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.