基於Python自定義Shell多分隔符字串切分函式
阿新 • • 發佈:2021-02-09
運用背景
在某些場景下,我們會利用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
結果截圖如下