如何从一个string中提取一个string开始和结束用户定义的特殊字符?

我正在使用Linux脚本,并想从主string中提取一个子string,如下例所示: –

主string=

2011-12-03 11:04:22#Alex#Audrino^13b11254^Townville#USA# 

我需要的是:

子串=

 13b11254 

我只是想阅读和提取^ ^特殊字符之间的任何内容。

这段代码将被用在一个linux脚本中。

POSIX sh兼容:

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

假设^每个字符串只用2个作为2个分隔符。

使用标准shell 参数扩展

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

下面的解决方案使用了cut实用程序,该实用程序生成一个进程,并且比shell参数扩展解决方案更慢。 这可能会更容易理解,并且可以在文件上而不是在单个字符串上运行。

 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]} 

这可以让你测试你是否有两个分隔符:

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