我工作的Linux腳本,並要提取的子出了主串如下面的例子: -如何從Linux中的字符串中提取以用戶定義的特殊字符開頭和結尾的子字符串?
主串=
2011-12-03 11:04:22#Alex#Audrino^13b11254^Townville#USA#
我要求是: -
子串=
13b11254
我只是想讀取和提取^ ^特殊字符之間的任何內容。
此代碼將用於Linux腳本。
我工作的Linux腳本,並要提取的子出了主串如下面的例子: -如何從Linux中的字符串中提取以用戶定義的特殊字符開頭和結尾的子字符串?
主串=
2011-12-03 11:04:22#Alex#Audrino^13b11254^Townville#USA#
我要求是: -
子串=
13b11254
我只是想讀取和提取^ ^特殊字符之間的任何內容。
此代碼將用於Linux腳本。
POSIX SH兼容:
temp="${string#*^}"
printf "%s\n" "${temp%^*}"
假設條件是^
只用於每串2X作爲2名的分隔符。
使用標準殼參數擴展:
% s='2011-12-03 11:04:22#Alex#Audrino^13b11254^Townville#USA#' ss=${s#*^} ss=${ss%^*}
% printf '%s\n' "$ss"
13b11254
感謝您的回答,它解釋了語法,而jw013顯示了實用的方法 –
溶液波紋管採用cut
實用程序,它生成一個進程和較慢,殼參數擴展的解決方案。它可能更易於理解,並且可以在文件上而不是在單個字符串上運行。
s='2011-12-03 11:04:22#Alex#Audrino^13b11254^Townville#USA#'
echo $s | cut -d '^' -f 2
您還可以使用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
一個小側面說明:你不」不需要在賦值語句右側引用參數,因爲它不受在此上下文中的shell字段拆分或glob擴展的限制。當然,如果你發現這個語法更具可讀性,你可以自由地做到這一點。 –
@ jw013這更實用,謝謝 –
@Dimitre謝謝 - 我知道,但這只是我個人的習慣/怪癖,總是把字符串放在引號中 - 比我想象的要好。 – jw013