2011-08-04 44 views

回答

0

POSIX SH兼容:

temp="${string#*^}" 
printf "%s\n" "${temp%^*}" 

假設條件是^只用於每串2X作爲2名的分隔符。

+0

一個小側面說明:你不」不需要在賦值語句右側引用參數,因爲它不受在此上下文中的shell字段拆分或glob擴展的限制。當然,如果你發現這個語法更具可讀性,你可以自由地做到這一點。 –

+0

@ jw013這更實用,謝謝 –

+0

@Dimitre謝謝 - 我知道,但這只是我個人的習慣/怪癖,總是把字符串放在引號中 - 比我想象的要好。 – jw013

1

使用標準殼參數擴展

% s='2011-12-03 11:04:22#Alex#Audrino^13b11254^Townville#USA#' ss=${s#*^} ss=${ss%^*} 
% printf '%s\n' "$ss"                 
13b11254 
+0

感謝您的回答,它解釋了語法,而jw013顯示了實用的方法 –

1

溶液波紋管採用cut實用程序,它生成一個進程和較慢,殼參數擴展的解決方案。它可能更易於理解,並且可以在文件上而不是在單個字符串上運行。

s='2011-12-03 11:04:22#Alex#Audrino^13b11254^Townville#USA#' 
echo $s | cut -d '^' -f 2 
1

您還可以使用bash的數組和字段分隔符:

IFS="^" 
s='2011-12-03 11:04:22#Alex#Audrino^13b11254^Townville#USA#' 
array=($s) 
echo ${array[1]} 

這可以讓你測試你有完全相同2分離:

if [ ${#array[*]} -ne 3 ] 
then 
    echo error 
else 
    echo ok 
fi 
相關問題