Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình Bash

Tách chuỗi trong Bash dễ dàng: Hướng dẫn hoàn chỉnh với ví dụ thực tế

Bài viết này sẽ chỉ cho bạn cách tách một chuỗi tại một delimiter cho trước trong script Bash/Shell và đưa ra một số ví dụ.

Tách chuỗi là một hàm tiện lợi khi viết script. CSV (Comma Separated Values) là định dạng phổ biến cung cấp dữ liệu trực tuyến, nơi các trường dữ liệu trong bảng được tách bằng (ngạc nhiên) dấu phẩy.

Bạn cũng có thể chỉ muốn tách câu thành từ tại khoảng trắng, hoặc tách đoạn văn thành câu tại dấu chấm, v.v.

Nhiều giải pháp tập trung vào phương pháp Bash-specific để tách chuỗi. Dưới đây, tôi sẽ phác thảo một phương pháp hoạt động trong bất kỳ script shell Linux nào.

Sử dụng lệnh cut để tách chuỗi

Lệnh cut trong Linux loại bỏ các phần từ các dòng trong file văn bản và xuất ra chúng.

Ví dụ này sẽ thích nghi lệnh này để tách văn bản tại một delimiter cho trước.

Để xem manual đầy đủ của lệnh cut, bấm vào đây.

Code

Dưới đây là ví dụ script Bash lấy chuỗi splitMe và trả về các mục dựa trên vị trí của chúng trong chuỗi tách ở dấu phẩy (,):

#!/bin/bash
# Định nghĩa chuỗi phân cách bằng dấu phẩy
splitMe='apple,banana,grape,kiwi'
# Lấy mục đầu tiên trong chuỗi tách
firstItem="$(echo $splitMe | cut -d',' -f1)"
# Lấy mục thứ ba trong chuỗi tách
thirdItem="$(echo $splitMe | cut -d',' -f3)"
# Xác nhận kết quả bằng cách xuất ra màn hình
echo $thirdItem

Tại sao điều này hoạt động? Lệnh echo được dùng để pipe chuỗi gốc đến lệnh cut. Lệnh cut dùng tùy chọn -d để chỉ định delimiter (trong trường hợp này là dấu phẩy, nhưng bất kỳ ký tự hoặc chuỗi nào cũng có thể dùng), và tùy chọn -f theo sau một số để chỉ định trường nào nên được trả về – đó là vị trí của mục bạn muốn lấy từ chuỗi đã tách.

Hàm Bash tái sử dụng

Điều đó tốt, nhưng không thực sự tái sử dụng được – nên đây là dưới dạng hàm:

#!/bin/bash
# Định nghĩa hàm tách chuỗi
# Nó nhận ba tham số: chuỗi cần tách, delimiter, và cuối cùng là vị trí mục cần trả về
splitMyString(){
  splitString=$1
  delimiter=$2
  item=$3
  result="$(echo $splitString | cut -d',' -f$item)"
  echo $result
}
# Định nghĩa chuỗi để test
splitMe='apple,banana,grape,kiwi'
# Test hàm bằng cách tách chuỗi ở dấu phẩy và trả về mục thứ hai
echo $(splitMyString $splitMe "," 2)