Tách một chuỗi trên dấu phân cách trong Bash

Bash

Phá vỡ thao tác chuỗi trong Bash

Khi làm việc với các tập lệnh shell, một nhiệm vụ phổ biến là phân tách một chuỗi dựa trên dấu phân cách. Ví dụ: hãy xem xét một chuỗi chứa các địa chỉ email được phân tách bằng dấu chấm phẩy. Nếu bạn cần xử lý từng email riêng lẻ, việc hiểu cách phân tách chuỗi này trở nên cần thiết. Bài viết này sẽ hướng dẫn bạn các phương pháp khác nhau để đạt được điều này trong Bash.

Chúng ta sẽ khám phá các giải pháp như sử dụng lệnh `tr` và thao tác với Bộ phân tách trường nội bộ (IFS). Cuối cùng, bạn sẽ có thể xử lý việc phân tách chuỗi một cách hiệu quả và đặt lại IFS về giá trị mặc định. Hãy cùng đi sâu vào và đơn giản hóa các tác vụ viết kịch bản Bash của bạn!

Yêu cầu Sự miêu tả
tr Dịch hoặc xóa ký tự. Được sử dụng ở đây để thay thế dấu chấm phẩy bằng ký tự dòng mới để phân tách chuỗi.
IFS Dấu tách trường nội bộ, được sử dụng để phân tách các chuỗi dựa trên dấu phân cách cụ thể trong tập lệnh Bash.
read -r -a Đọc một dòng đầu vào và chia nó thành một mảng. Tùy chọn -r ngăn dấu gạch chéo ngược được hiểu là ký tự thoát.
echo In văn bản ra đầu ra tiêu chuẩn. Được sử dụng để hiển thị các phần tử chuỗi phân tách.
split Hàm Perl chia chuỗi thành danh sách các chuỗi dựa trên dấu phân cách được chỉ định.
foreach Cấu trúc vòng lặp Perl lặp qua danh sách các giá trị.

Hiểu kỹ thuật tách chuỗi Bash

Tập lệnh Bash đầu tiên trình bày cách phân tách một chuỗi bằng cách sử dụng yêu cầu. Ở đây chúng ta định nghĩa một chuỗi Và sử dụng kết hợp với tr để dịch dấu phân cách dấu chấm phẩy thành ký tự dòng mới. Điều này có hiệu quả chia chuỗi thành các dòng riêng lẻ. Các sau đó lặp lại từng dòng, in địa chỉ trong dấu ngoặc vuông. Phương pháp này đơn giản và tận dụng khả năng xử lý văn bản mạnh mẽ của các lệnh Unix để thao tác với chuỗi.

Một phương pháp khác liên quan đến việc điều chỉnh . Bằng cách thiết lập tạm thời thành dấu chấm phẩy, chúng ta có thể chia chuỗi thành một mảng. Chúng tôi lưu bản gốc ĐẾN số 8 trước khi sửa đổi nó, đảm bảo chúng ta có thể khôi phục nó sau này. Các lệnh đọc chuỗi đầu vào thành một mảng gọi là , chia tách nó dựa trên sửa đổi . Sau khi xử lý, bản gốc IFS được phục hồi. Cách tiếp cận này cung cấp một cách lập trình hơn để xử lý việc phân tách chuỗi trong Bash, cho phép chúng ta sử dụng mảng để thao tác thêm.

Sử dụng Bash để tách chuỗi trên dấu phân cách

Tập lệnh Bash

#!/usr/bin/env bash
# Input string
IN="bla@some.com;john@home.com"
# Split string using 'tr' and iterate
mails=$(echo $IN | tr ";" "\n")
for addr in $mails; do
  echo "> [$addr]"
done

# Output:
# > [bla@some.com]
# > [john@home.com]

Tách một chuỗi trong Bash bằng IFS

Tập lệnh Bash

#!/usr/bin/env bash
# Input string
IN="bla@some.com;john@home.com"
# Save the original IFS
OIFS=$IFS
# Set IFS to semicolon
IFS=';'
# Split string into an array
read -r -a mails2 <<< "$IN"
# Restore the original IFS
IFS=$OIFS
# Iterate over the array
for x in "${mails2[@]}"; do
  echo "> [$x]"
done

# Output:
# > [bla@some.com]
# > [john@home.com]

Sử dụng Python để tách chuỗi

Tập lệnh Python

#!/usr/bin/env python3
# Input string
IN = "bla@some.com;john@home.com"
# Split string by semicolon
mails = IN.split(';')
# Iterate and print each element
for addr in mails:
    print(f"> [{addr}]")

# Output:
# > [bla@some.com]
# > [john@home.com]

Sử dụng Perl để tách một chuỗi

Tập lệnh Perl

#!/usr/bin/env perl
use strict;
use warnings;
# Input string
my $IN = "bla@some.com;john@home.com";
# Split string by semicolon
my @mails = split(';', $IN);
# Iterate and print each element
foreach my $addr (@mails) {
    print "> [$addr]\n";
}

# Output:
# > [bla@some.com]
# > [john@home.com]

Kỹ thuật tách chuỗi nâng cao trong Bash

Một phương pháp mạnh mẽ khác để tách chuỗi trong Bash liên quan đến việc sử dụng yêu cầu. là một tiện ích dòng lệnh linh hoạt được thiết kế để quét và xử lý mẫu. Nó có thể đặc biệt hữu ích cho việc phân tách chuỗi vì nó cho phép chúng ta xác định các dấu phân cách trường tùy chỉnh. Ví dụ, chúng ta có thể sử dụng để phân tách một chuỗi dựa trên dấu phân cách dấu chấm phẩy và in các thành phần riêng lẻ. Phương pháp này rất linh hoạt và có thể xử lý các tác vụ thao tác chuỗi phức tạp hơn, khiến nó trở thành một công cụ có giá trị trong bộ công cụ của lập trình viên Bash.

Ngoài ra, lệnh có thể được sử dụng để phân tách chuỗi dựa trên dấu phân cách. Các lệnh thường được sử dụng để trích xuất các phần từ mỗi dòng dữ liệu đầu vào. Bằng cách chỉ định một dấu phân cách với tùy chọn và chọn các trường với -f tùy chọn, chúng ta có thể phân tách và trích xuất các phần của chuỗi một cách hiệu quả. Ví dụ, sử dụng sẽ trích xuất địa chỉ email đầu tiên từ chuỗi đầu vào. Các phương thức nâng cao này cung cấp khả năng kiểm soát và độ chính xác cao hơn cho các tác vụ thao tác chuỗi trong Bash.

  1. Làm cách nào để tách một chuỗi trên dấu phân cách trong Bash?
  2. Bạn có thể dùng biến hoặc lệnh như , , Và cut để phân tách chuỗi trên dấu phân cách.
  3. cái gì là biến trong Bash?
  4. Các (Dấu tách trường nội bộ) là một biến đặc biệt xác định (các) ký tự được sử dụng để phân tách văn bản đầu vào thành các từ hoặc mã thông báo.
  5. Làm cách nào tôi có thể thiết lập lại biến về giá trị mặc định của nó?
  6. Lưu bản gốc value trước khi thay đổi và khôi phục nó sau khi xử lý: .
  7. cái gì làm lệnh thực hiện trong việc tách chuỗi?
  8. Các lệnh dịch hoặc xóa ký tự. Nó có thể thay thế các dấu phân cách bằng dòng mới để phân tách một chuỗi: .
  9. Tôi có thể chia một chuỗi thành một mảng bằng Bash không?
  10. Có, bằng cách thay đổi biến và sử dụng , bạn có thể chia một chuỗi thành một mảng:
  11. cái gì là lệnh dùng để làm gì?
  12. là một tiện ích dòng lệnh để quét và xử lý mẫu. Nó có thể phân tách các chuỗi bằng cách xác định các dấu phân cách trường tùy chỉnh.
  13. Làm thế nào lệnh làm việc?
  14. Các lệnh trích xuất các phần từ mỗi dòng đầu vào. Nó có thể phân tách chuỗi bằng cách chỉ định dấu phân cách và chọn các trường: .
  15. Tại sao lại sử dụng hữu ích trong việc tách chuỗi?
  16. sử dụng cho phép bạn xác định các dấu phân cách tùy chỉnh để phân tách chuỗi, làm cho nó linh hoạt với các định dạng đầu vào khác nhau.
  17. Có thể chia chuỗi bằng nhiều dấu phân cách trong Bash không?
  18. Có, bạn có thể sử dụng kết hợp Và để xử lý nhiều dấu phân cách.
  19. Tôi có thể sử dụng không? để tách chuỗi trong Bash?
  20. Trong khi chủ yếu là trình chỉnh sửa luồng, nó có thể được kết hợp với các lệnh khác như để chia chuỗi một cách gián tiếp.

Việc thành thạo thao tác chuỗi trong Bash có thể cải thiện đáng kể hiệu quả viết kịch bản của bạn. Cho dù sử dụng cho các dấu phân cách đơn giản hoặc các công cụ nâng cao hơn như Và , những kỹ thuật này rất cần thiết để lập trình Bash hiệu quả. Nhớ luôn khôi phục lại bản gốc IFS để tránh hành vi không mong muốn trong tập lệnh của bạn. Với những phương thức này, bạn có thể xử lý nhiều tác vụ xử lý chuỗi trong tập lệnh Bash của mình.