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

Cách tách một chuỗi trong Bash / Shell Scripts, với các ví dụ

Bài viết này sẽ chỉ cho bạn cách tách một chuỗi tại một dấu phân cách nhất định trong tập lệnh Bash / Shell và hiển thị một số ví dụ.

Tách chuỗi là một chức năng tiện dụng có sẵn khi tạo tập lệnh của bạn. CSV (Giá trị được phân tách bằng dấu phẩy) là định dạng phổ biến trong đó dữ liệu được cung cấp trực tuyến, trong đó các trường dữ liệu trong bảng được phân tách bằng dấu phẩy (bất ngờ).

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

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

Sử dụng cut Lệnh tách chuỗi

Các cắt lệnh trong Linux xóa các phần khỏi các dòng trong tệp văn bản và sau đó xuất chúng.

Ví dụ này sẽ điều chỉnh lệnh này để tách văn bản tại một dấu phân cách nhất định.

Để có hướng dẫn sử dụng đầy đủ của cut , nhấp vào đây.

Dưới đây là ví dụ về tập lệnh 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 phân chia bằng dấu phẩy (, ):

#!/bin/bash

# Define a comma-separated string
splitMe='apple,banana,grape,kiwi'

# Get the first item in the split string
firstItem="$(echo $splitMe | cut -d',' -f1)"

# Get the third item in the split string
thirdItem="$(echo $splitMe | cut -d',' -f3)"

# Confirm the result by outputting it to screen
echo $thirdItem

Vậy tại sao điều này lại hoạt động? Tiếng vọng lệnh được sử dụng để chuyển chuỗi ban đầu đến cut yêu cầu. Các cắt lệnh sử dụng -d tùy chọn để chỉ định dấu phân cách ( trong trường hợp này là dấu phẩy, nhưng có thể sử dụng bất kỳ ký tự hoặc chuỗi nào ) và -f theo sau là một số để chỉ định trường nào sẽ được trả về - đó là vị trí của mục bạn muốn lấy từ chuỗi phân tách.

Hàm Bash có thể tái sử dụng

Đó là tất cả tốt và tốt, nhưng nó không thực sự có thể sử dụng lại được - vì vậy đây là một chức năng:

#!/bin/bash

# Define function to split strings
# It will accept three parameters, the string to split, the delimiter, and finally the position of the item to return
splitMyString(){
    splitString=$1
    delimiter=$2
    item=$3
    result="$(echo $splitString | cut -d',' -f$item)"
    echo $result
}

# Define a string to split for testing
splitMe='apple,banana,grape,kiwi'

# Test the function by splitting the string at the comma and returning the second item
echo $(splitMyString $splitMe "," 2)