1. 程式人生 > 其它 >基於Python自定義Shell多分隔符字串切分函式

基於Python自定義Shell多分隔符字串切分函式

技術標籤:linuxpythonshell

運用背景

在某些場景下,我們會利用shell文字處理分析半結構資料,在單分隔符下cut或是一個不錯的選擇。但在多分隔符下cut就over了,這時很多小夥伴可能就想到了sed、awk甚至是perl之類的工具。但本人嘗試之後卻依舊覺得不盡人意,特別是在分隔符包含" " 這 樣 的 特 殊 符 號 背 景 下 , 在 此 採 用 “ ′ ” 符 號 取 消 "這樣的特殊符號背景下,在此採用“'”符號取消 "$轉義。

基於上述背景,在此採用shell呼叫python的方式封裝實現了一個自定義字串切割函式,支援多分隔符,返回切分結果陣列對應下標的值。其他運用場景,希望本文能起到拋磚引玉的效果。

程式碼實現

Python:#pyFun.py

#pyFun.py
#str : the string you wanna split
#delimiter
#index 
def mySplit(str,delimiter,index):
    #print("str:" +str+ " delimiter: "+ delimiter +"index: "+index)
    x = str.split(delimiter)[int(index)]
    return x

if __name__ == '__main__':
mySplit()

Bash

#pyCall.sh
#define our split function
selfSplit(){
    str=$1
    delimiter=$2
    index=$3
    export splitResult=$(python -c 'import pyFun; print pyFun.mySplit("'$str'","'$delimiter'","'$index'")')
}

測試程式碼

#pyCall.sh
#test
#str='[email protected]
[email protected]~$China'
str="'`sed -n "$1p" t.txt`'" delimiter='@~$' index=1 selfSplit "$str" "$delimiter" "$index" echo "check splitResult: $splitResult"

t.txt

[email protected]~[email protected]~$China

結果截圖如下
在這裡插入圖片描述