Computer >> Máy Tính >  >> Lập trình >> Lập trình BASH

Ví dụ về thao tác chuỗi mã Bash - Độ dài, Chuỗi con, Tìm và Thay thế

Trong bash shell, khi bạn sử dụng ký hiệu đô la theo sau là tên biến, shell sẽ mở rộng biến với giá trị của nó. Tính năng này của shell được gọi là mở rộng tham số.

Nhưng mở rộng tham số có nhiều dạng khác cho phép bạn mở rộng một tham số và sửa đổi giá trị hoặc thay thế các giá trị khác trong quá trình mở rộng. Trong bài viết này, chúng ta hãy xem lại cách sử dụng khái niệm mở rộng tham số cho các hoạt động thao tác chuỗi.

Bài viết này là một phần của loạt bài hướng dẫn bash đang thực hiện. Tham khảo bài viết trước đây của chúng tôi về mở rộng bash {}.

1. Xác định độ dài chuỗi bên trong Bash Shell Script

${#string}

Định dạng trên được sử dụng để lấy độ dài của biến bash đã cho.

$ cat len.sh
#! /bin/bash

var="Welcome to the geekstuff"

echo ${#var}

$ ./len.sh
24

Để hiểu thêm về biến bash, hãy đọc 6 Ví dụ thực tế về biến địa phương và toàn cục của Bash.

2. Trích xuất một chuỗi con từ một biến bên trong Bash Shell Script

Bash cung cấp một cách để trích xuất một chuỗi con từ một chuỗi. Ví dụ sau giải thích cách phân tích cú pháp n ký tự bắt đầu từ một vị trí cụ thể.

${string:position}

Trích xuất chuỗi con từ $ string tại $ position

${string:position:length}

Trích xuất $ độ dài của chuỗi ký tự từ $ string bắt đầu từ $ position. Trong ví dụ dưới đây, câu lệnh echo đầu tiên trả về chuỗi con bắt đầu từ vị trí thứ 15. Câu lệnh echo thứ hai trả về 4 ký tự bắt đầu từ vị trí thứ 15. Độ dài phải là số lớn hơn hoặc bằng không.

$ cat substr.sh
#! /bin/bash

var="Welcome to the geekstuff"

echo ${var:15}
echo ${var:15:4}

$ ./substr.sh
geekstuff
geek

Ngoài ra, hãy tham khảo bài viết trước của chúng tôi để hiểu thêm về các tham số đặc biệt của $ *, $ @, $ #, $$, $ !, $ ?, $ -, $ _ bash.

3. Khớp chuỗi con ngắn nhất

Cú pháp sau sẽ xóa kết quả khớp ngắn nhất của chuỗi con $ phía trước $ string

${string#substring}

Cú pháp sau sẽ xóa kết quả phù hợp ngắn nhất của chuỗi con $ khỏi mặt sau của chuỗi $

${string%substring}

Tập lệnh shell mẫu sau giải thích hai khái niệm đối sánh chuỗi con ngắn nhất ở trên.

$ cat shortest.sh
#! /bin/bash

filename="bash.string.txt"

echo ${filename#*.}
echo ${filename%.*}

$ ./shortest.sh
After deletion of shortest match from front: string.txt
After deletion of shortest match from back: bash.string

Trong câu lệnh echo đầu tiên, chuỗi con ‘*.’ Khớp với các ký tự và dấu chấm, và # dải từ phía trước chuỗi, vì vậy, nó tách chuỗi con “bash”. từ biến được gọi là tên tệp. Trong câu lệnh echo thứ hai, chuỗi con ‘. *’ Khớp với chuỗi con bắt đầu bằng dấu chấm và% dải từ phía sau chuỗi, do đó, nó sẽ xóa chuỗi con ‘.txt’

4. Khớp chuỗi con dài nhất

Cú pháp sau sẽ xóa kết quả khớp dài nhất của chuỗi $ phụ khỏi chuỗi $ phía trước

${string##substring}

Cú pháp sau sẽ xóa kết quả khớp dài nhất của chuỗi con $ từ phía sau của chuỗi $

${string%%substring}

Tập lệnh shell mẫu sau giải thích hai khái niệm đối sánh chuỗi con dài nhất ở trên.

$ cat longest.sh
#! /bin/bash

filename="bash.string.txt"

echo "After deletion of longest match from front:" ${filename##*.}
echo "After deletion of longest match from back:" ${filename%%.*}

$ ./longest.sh
After deletion of longest match from front: txt
After deletion of longest match from back: bash

Trong ví dụ trên, ## *. dải đối sánh dài nhất cho ‘*.’ khớp với “bash.string”. vì vậy sau khi dải này, nó sẽ in txt còn lại. Và %%. * Loại bỏ kết quả phù hợp dài nhất đối với. * Từ đó đối sánh với “.string.txt”, sau khi loại bỏ nó sẽ trả về “bash”.

5. Tìm và thay thế các giá trị chuỗi bên trong Bash Shell Script

Chỉ thay thế kết quả phù hợp đầu tiên

${string/pattern/replacement}

Nó khớp với mẫu trong biến $ string và chỉ thay thế kết hợp đầu tiên của mẫu bằng thay thế.

$ cat firstmatch.sh
#! /bin/bash

filename="bash.string.txt"

echo "After Replacement:" ${filename/str*./operations.}

$ ./firstmatch.sh
After Replacement: bash.operations.txt

Thay thế tất cả các kết quả phù hợp

${string//pattern/replacement}

Nó thay thế tất cả các kết quả phù hợp của mẫu bằng sự thay thế.

$ cat allmatch.sh
#! /bin/bash

filename="Path of the bash is /bin/bash"

echo "After Replacement:" ${filename//bash/sh}

$ ./allmatch.sh
After Replacement: Path of the sh is /bin/sh

Về tìm và thay thế, hãy tham khảo các bài viết trước đây của chúng tôi - các ví dụ về thay thế sed và tìm và thay thế Vim.

Thay thế phần đầu và phần cuối

${string/#pattern/replacement}

Cú pháp sau thay thế bằng chuỗi thay thế, chỉ khi mẫu khớp với phần đầu của chuỗi $.

${string/%pattern/replacement}

Cú pháp sau thay thế bằng chuỗi thay thế, chỉ khi mẫu khớp ở cuối chuỗi $ đã cho.

$ cat posmatch.sh
#! /bin/bash

filename="/root/admin/monitoring/process.sh"

echo "Replaced at the beginning:" ${filename/#\/root/\/tmp}
echo "Replaced at the end": ${filename/%.*/.ksh}

$ ./posmatch.sh
Replaced at the beginning: /tmp/admin/monitoring/process.sh
Replaced at the end: /root/admin/monitoring/process.ksh

Đọc đề xuất

Ví dụ về thao tác chuỗi mã Bash - Độ dài, Chuỗi con, Tìm và Thay thế Bash 101 Hacks, bởi Ramesh Natarajan . Tôi dành phần lớn thời gian trên môi trường Linux. Vì vậy, dĩ nhiên tôi là một người rất hâm mộ dòng lệnh Bash và kịch bản shell. 15 năm trước, khi tôi làm việc trên các phiên bản * nix khác nhau, tôi đã từng viết rất nhiều mã trên C shell và Korn shell. Những năm sau đó, khi tôi bắt đầu làm việc trên Linux với tư cách là quản trị viên hệ thống, tôi đã tự động hóa mọi tác vụ có thể bằng cách sử dụng Bash shell scripting. Dựa trên kinh nghiệm sử dụng Bash của mình, tôi đã viết sách điện tử Bash 101 Hacks chứa 101 ví dụ thực tế về cả dòng lệnh Bash và kịch bản shell. Nếu bạn đang nghĩ đến việc thành thạo Bash, hãy tự giúp mình và đọc cuốn sách này, cuốn sách này sẽ giúp bạn kiểm soát dòng lệnh Bash và tập lệnh shell của mình.