2011-08-04 22 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 
相关问题