如何从linux中的字符串中提取用户定义的特殊字符开头和结尾的子字符串?

时间:2011-08-04 07:31:28

标签: linux bash scripting sed awk

我正在研究linux脚本,并希望从主字符串中提取子字符串,如下例所示: -

主字符串=

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

我需要的是: -

Substring =

13b11254    

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

此代码将用于linux脚本。

4 个答案:

答案 0 :(得分:1)

使用标准shell 参数扩展

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

答案 1 :(得分:1)

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

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

答案 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

答案 3 :(得分:0)

POSIX sh兼容:

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

假设^每个字符串仅使用2x作为2个分隔符。