首页威尼斯国际官方网站 › www.vns1522.com使用awk处理带标签文本,610抢滩海外市场

www.vns1522.com使用awk处理带标签文本,610抢滩海外市场

HP可真够"爱国"的,有着迷人触摸感应环的WM6机种iPAQ
610<em>单单</em>在美国取消发布了。这条让人喜忧参半的消息来自与英国零售商Devicewire,下周一,他们将以389.99英镑的价格发售iPAQ
614。主站小编:"哼,iPAQ这种乐色,我们、我们才不稀罕呢>///<"[翻译:Rex][Via
CoolSmartphone]

使用awk处理带标签文本

 

 假设有"123<em>abc</em>456<em>def</em>789<em>ghi</em>"这么一个字符串

题中的字符串,要截取长度5,则返回的字符串应该为:123ab,要截取长度8,应返回123<em>abc</em>45。

附:

1 <em>和</em>标记不得计算在长度之内。

2
截取后的字符串,要保留原有<em>标签,不过如果最后有一个标签没有闭合,则去掉其开始标签。

 

代码:如下

#!/bin/bash

a='123<em>abc</em>456<em>def</em>789<em>ghi</em>'

echo "test text is '$a'"

read -p "please input a number little than `echo $a|awk
'{gsub("<em>|</em>","",$0);printf length($0)}'`: " num

 

echo $a | awk -vnum="$num" -vFS='</em>'
'{for(i=1;i<=NF;i++){orisum=sum;sum+=length($i)-4;if(sum<=num){strlist=strlist
~ /./ ? strlist""FS""$i :
$i}else{sub("<em>","",$i);strlist=strlist ~ /./ ?
strlist""FS""substr($i,1,num-orisum) :
substr($i,1,num-orisum);break}}print strlist}'

 

测试结果:

 

[[email protected]
~]# bash 1.sh 

test text is
'123<em>abc</em>456<em>def</em>789<em>ghi</em>'

please input a number little than 18: 2

12

[[email protected]
~]# bash 1.sh 

test text is
'123<em>abc</em>456<em>def</em>789<em>ghi</em>'

please input a number little than 18: 5

123ab

[[email protected]
~]# bash 1.sh 

test text is
'123<em>abc</em>456<em>def</em>789<em>ghi</em>'

please input a number little than 18: 7

123<em>abc</em>4

[[email protected]
~]# bash 1.sh 

test text is
'123<em>abc</em>456<em>def</em>789<em>ghi</em>'

please input a number little than 18: 10

123<em>abc</em>456d

[[email protected]
~]# bash 1.sh 

test text is
'123<em>abc</em>456<em>def</em>789<em>ghi</em>'

please input a number little than 18: 9

123<em>abc</em>456

[[email protected]
~]# bash 1.sh 

test text is
'123<em>abc</em>456<em>def</em>789<em>ghi</em>'

please input a number little than 18: 14

123<em>abc</em>456<em>def</em>78

[[email protected]
~]# bash 1.sh 

www.vns1522.com,test text is
'123<em>abc</em>456<em>def</em>789<em>ghi</em>'

please input a number little than 18: 17

123<em>abc</em>456<em>def</em>789gh

[[email protected]
~]# bash 1.sh 

test text is
'123<em>abc</em>456<em>def</em>789<em>ghi</em>'

please input a number little than 18: 18

123<em>abc</em>456<em>def</em>789<em>ghi</em>

[[email protected]
~]#

 

假设有123emabc/em456emdef/em789emghi/em这么一个字符串
题中的字符串,要截取长度5,则返回的字符串应该为:123ab,要截取长...

转载本站文章请注明出处:威尼斯城官方网站 https://www.thomasbui.com/?p=3072

上一篇:

下一篇:

相关文章