我工作的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