Ví dụ về chuỗi phân tách Bash

Bash Split String Examples



Chúng ta cần chia nhỏ dữ liệu chuỗi cho nhiều mục đích khác nhau trong lập trình. Nhiều ngôn ngữ lập trình có một chức năng tích hợp có tên là ‘split’ để chia bất kỳ dữ liệu chuỗi nào thành nhiều phần. Nhưng không có hàm tích hợp sẵn trong bash để chia chuỗi. Thông thường, một hoặc nhiều dấu phân cách được sử dụng để phân chia bất kỳ dữ liệu chuỗi nào. Cách bạn có thể chia chuỗi trong bash được hiển thị trong hướng dẫn này bằng cách sử dụng các ví dụ khác nhau.








Sử dụng biến $ IFS

Biến shell đặc biệt $ IFS được sử dụng trong bash để tách một chuỗi thành các từ. Biến $ IFS được gọi là Dấu phân tách trường nội bộ (IFS) được sử dụng để gán dấu phân cách cụ thể để chia chuỗi. Các ranh giới từ được xác định trong bash bởi $ IFS. Khoảng trắng là giá trị dấu phân cách mặc định cho biến này. Bất kỳ giá trị nào khác như ‘ t’, ‘ n’, ‘-‘ v.v. Có thể được sử dụng làm dấu phân cách. Sau khi gán giá trị vào biến $ IFS, giá trị chuỗi có thể được đọc bởi hai tùy chọn. Đây là ‘-r’ và ‘-a’. Tùy chọn, ‘-r’ được sử dụng để đọc dấu gạch chéo ngược () như một ký tự thay vì ký tự thoát và tùy chọn ‘-a’ được sử dụng để lưu trữ các từ được tách thành một biến mảng. Chuỗi có thể được chia nhỏ mà không cần sử dụng biến $ IFS trong bash. Các cách khác nhau để phân chia dữ liệu chuỗi (với $ IFS hoặc không có $ IFS) được hiển thị trong các ví dụ sau.



Ví dụ-1: Phân chia chuỗi dựa trên

Giá trị chuỗi được chia cho khoảng trắng theo mặc định. Tạo tệp có tên ‘split1.sh’ và thêm mã sau. Ở đây, biến $ text được sử dụng để gán một giá trị chuỗi. Biến shell, $ IFS được sử dụng để gán ký tự sẽ được sử dụng để phân chia dữ liệu chuỗi. Dấu cách được sử dụng trong tập lệnh này làm dấu phân cách. Tùy chọn ‘-a’ được sử dụng với lệnh đọc để lưu trữ dữ liệu đã tách thành một biến mảng có tên là $ strarr. Vòng lặp ‘for’ được sử dụng để đọc từng phần tử của mảng, $ strarr.



split1.sh





#! / bin / bash

# Xác định giá trị chuỗi
chữ='Chào mừng đến với LinuxHint'

# Đặt khoảng trắng làm dấu phân cách
IFS=''

# Đọc các từ được tách thành một mảng dựa trên dấu phân cách khoảng trắng
đọc -đếnstrarr<<< '$ text'

# Đếm tổng số từ
quăng đi 'Có$ {# strarr [*]}từ trong văn bản. '

# In từng giá trị của mảng bằng cách sử dụng vòng lặp
giờtrong '$ {strarr [@]}';
làm
printf '$ giờ '
xong

Đầu ra:

Chạy tập lệnh.



$bấu víusplit1.sh

Kết quả sau sẽ xuất hiện sau khi chạy tập lệnh.

Ví dụ-2: Tách chuỗi dựa trên một ký tự cụ thể

Bất kỳ ký tự cụ thể nào cũng có thể được sử dụng làm dấu phân cách để phân chia giá trị chuỗi. Tạo một tệp có tên split2.sh và thêm mã sau. Ở đây, tên sách, tên tác giả và giá trị giá được lấy bằng cách thêm dấu phẩy (,) làm chuỗi đầu vào. Tiếp theo, giá trị chuỗi được phân tách và lưu trữ trong một mảng dựa trên giá trị của biến shell, $ IFS. Mỗi giá trị của các phần tử mảng được in bởi giá trị chỉ mục.

split2.sh

#! / bin / bash

# Đọc giá trị chuỗi
quăng đi 'Nhập tên sách, tên tác giả và giá bằng cách phân cách dấu phẩy. '
đọcchữ

# Đặt dấu phẩy làm dấu phân cách
IFS=','

# Đọc các từ được chia thành một mảng dựa trên dấu phân cách bằng dấu phẩy
đọc -đếnstrarr<<< '$ text'

# In các từ đã tách
quăng đi 'Tên sách :$ {strarr [0]}'
quăng đi 'Tên tác giả :$ {strarr [1]}'
quăng đi 'Giá bán :$ {strarr [2]}'

Đầu ra:

Chạy tập lệnh.

$bấu víusplit2.sh

Kết quả sau sẽ xuất hiện sau khi chạy tập lệnh.

Ví dụ-3: Tách chuỗi mà không có biến $ IFS

Ví dụ này cho thấy cách chia giá trị chuỗi mà không cần sử dụng $ IFS trong bash. Tạo một tệp có tên là ‘ split3.sh ' và thêm mã sau. Theo kịch bản, giá trị văn bản có dấu hai chấm (:) phải lấy làm đầu vào cho quá trình phân tách. Ở đây, lệnh ‘readarray’ với tùy chọn -d được sử dụng để chia nhỏ dữ liệu chuỗi. Tùy chọn ‘-d’ được sử dụng để xác định ký tự phân tách trong lệnh như $ IFS. Tiếp theo, vòng lặp ‘for’ được sử dụng để in các phần tử của mảng.

split3.sh

#! / bin / bash

# Đọc chuỗi chính
quăng đi 'Nhập chuỗi có dấu hai chấm (:) để tách'
đọcmainstr

# Ghép chuỗi dựa trên dấu phân cách, ':'
readarray-NS:-NSstrarr<<< '$ mainstr'
printf ' '

# In từng giá trị của mảng bằng cách sử dụng vòng lặp
(( n=0; n< $ {# strarr [*]}; n ++))
làm
quăng đi '$ {strarr [n]}'
xong

Đầu ra:

Chạy tập lệnh.

$bấu víusplit3.sh

Kết quả sau sẽ xuất hiện sau khi chạy tập lệnh.

Ví dụ-4: Tách chuỗi bằng dấu phân cách nhiều ký tự

Giá trị chuỗi được phân tách bằng một dấu phân cách ký tự trong tất cả các ví dụ trước. Cách bạn có thể chia chuỗi bằng cách sử dụng dấu phân cách nhiều ký tự được hiển thị trong ví dụ này. Tạo một tệp có tên Times split4.sh và thêm mã sau. Ở đây, biến $ text được sử dụng để lưu trữ dữ liệu chuỗi. Biến $ delimiter được sử dụng để gán một dữ liệu nhiều ký tự được sử dụng làm dấu phân tách trong các câu lệnh tiếp theo. Biến $ myarray được sử dụng để lưu trữ từng dữ liệu đã tách dưới dạng một phần tử mảng. Cuối cùng, tất cả dữ liệu được phân tách được in bằng cách sử dụng vòng lặp ‘for’.

split4.sh

#! / bin / bash

# Xác định chuỗi để tách
chữ='learningHTMLlearnPHPlearnMySQLlearnJavascript'

# Xác định dấu phân cách nhiều ký tự
dấu phân cách='học'
#Concatenate dấu phân cách với chuỗi chính
dây=$ text$ dấu phân cách

# Ghép văn bản dựa trên dấu phân cách
myarray=()
trong khi [[ $ string ]];làm
myarray + =( '$ {string %% '$ delimiter' *}' )
dây=$ {string # * '$ delimiter'}
xong

# In các từ sau khi tách
giá trịtrong $ {myarray [@]}
làm
quăng đi -n 'giá trị $'
xong
printf ' '

Đầu ra:

Chạy tập lệnh.

$bấu víusplit4.sh

Kết quả sau sẽ xuất hiện sau khi chạy tập lệnh.

Phần kết luận:

Dữ liệu chuỗi cần được phân chia cho các mục đích lập trình khác nhau. Các cách khác nhau để tách dữ liệu chuỗi trong bash được hiển thị trong hướng dẫn này. Hy vọng, sau khi thực hành các ví dụ trên, bạn đọc sẽ có thể tách bất kỳ dữ liệu chuỗi nào dựa trên yêu cầu của họ.

Để biết thêm thông tin, hãy xem video !