2013-06-26 62 views
2

任何想法如何可以采取类似的字符串:所以最终的产品是猛砸字符串格式化

string=1,2,3,4,5 

,并使用

number=4 

<font color='red'><b></b></font> 

围绕相应的数字:

newstring=1,2,3,<font color='red'><b>4</b></font>,5 

感谢您的帮助

+1

不'数= 4'指完全匹配在'string'或串的第四场?如果'string = a,b,c,d,e'和'number = 4'会怎么样? –

回答

1

您可以使用sed

result="$(sed "s|\($number\)|<font color='red'><b>\1</b></font>|" <<< "$string")" 

的一般形式是:sed s|search pattern|replace|其中|是一些独特的分隔符(通常你会使用/但已经在你的字符串中使用用于其他目的)。 \(…\)是一个捕获组它捕获命中 - 在这种情况下4和哪些可以通过\1在替换字符串中使用。

+0

'string = 11,12,1,4'和'number = 1'会出现问题 – 2013-06-26 22:41:42

+0

非常感谢! – Atomiklan

0
echo "$string" | sed "s#\(,\|^\)\($number\)\(,\|\$\)#\\1<font color='red'><b>\\2</b></font>\\3#g" 

在大多数情况下应该工作得足够好。

0

纯粹的打击?

string="1,2,3,4,5" 
num=4 

re="(^|.+,)($num)(,.+|$)" 
if [[ "$string" =~ $re ]] 
then 
    echo -n "${BASH_REMATCH[1]}" 
    echo -n "<font>${BASH_REMATCH[2]}</font>" 
    echo "${BASH_REMATCH[3]}" 
else 
    echo "$num doesn't match" 
fi 

会产生:

1,2,3,<font>4</font>,5 

或Perl:

echo '1,2,3,4,5' | num=4 perl -F, -lapE '$_=join ",",map{/\b$ENV{num}\b/? "<font>$_</font>":$_}@F' 
+0

如果num = 1呢? –

+0

@gniourf_gniourf谢谢 - 修复..;) – jm666