regsub的使用方法

         regsub ?switches? exp string subSpec ?varName?

1.使用方法

        这条命令的用法是:在string中匹配到exp后,用subSpec将exp替换掉,并把替换后形成新的string赋值给varName,如果没有定义varName,那么会将其直接打印到屏幕上。


icc2_shell> regsub ab abcde xx newname
1
icc2_shell> echo $newname
xxcde
icc2_shell> regsub ab abcde xx 
xxcde

        这里ab被替换成了xx    

        如果subSpec中包含“&”或者“\0”,表示将所匹配到的内容赋值于“&”或者“\0”,这里\&和\0都表示匹配到的ab,xx\&和xx\0表示 xxab


 icc2_shell> regsub ab abcde xx\& 
xxabcde
icc2_shell> regsub ab abcde xx\\0 
xxabcde

        如果subSpec中包含\1-9,那么使用string中与exp第n个括号匹配的字符串进行替换:

icc2_shell> regsub (.+)aa(.+)qq avaa/bbs/qqa xx\\1
xxava
icc2_shell> regsub (.+)aa(.+)qq avaa/bbs/qqa xx\\2
xx/bbs/a

        这里的\1 表示第一个(.+)匹配到的内容,即av , xx\\1 = xxav, 而(.+)aa(.+)qq匹配到的内容是avaa/bbs/qq,被替换成xxav , 所以最终的结果是xxava。\2表示第二个(.+)匹配到的内容,即/bbs/,所以结果是xx/bbs/a。

2.Option

switches代表能够使用的option,内容如下:

      -all

        表示找到所有与exp匹配的字符串并对每个匹配项进行替换。如果不打开这个开关,那么就会对找到的第一个进行替换


icc2_shell> regsub  ab (ab)(ab)(ab)cd  xx 
(xx)(ab)(ab)cd
icc2_shell> regsub -all  ab (ab)(ab)(ab)cd xx
(xx)(xx)(xx)cd

      -expanded

        打开这个选项后 exp中的空格和注释将会被忽略


regsub   "a b" (ab)(ab)(ab)cd xx
(ab)(ab)(ab)cd

regsub -expanded  "a b" (ab)(ab)(ab)cd xx
(xx)(ab)(ab)cd

        第一行命令没有加-expanded , 在(ab)(ab)(ab)cd中没有匹配到任何“a b”的字符串,所以操作结果没有任何变化。第4行增加了-expanded , “a b”之间的空格被忽略变成了ab, 所以第一个ab被替换成了xx。

      -line

        开启行敏感匹配,此选项相当于同时指定-linestop和-lineanchor。默认情况下在string中的换行符(\n)是一个完全普通的字符串,没有任何含义。可以被exp匹配到:

icc2_shell> regsub a.+b  aabb\nbAB\nc  xx
xxAB
c

        字符串中的第一个换行符被匹配和替换(如果没有被替换应该输出三行)。当打开-line选项后,匹配机制能够识别换行符,且换行符不会被替换掉。


icc2_shell> regsub -line a.+b aabb\nbAB\nc  xx
xx
bAB
c

      -linestop

        改变括号表达式的行为,识别换行符,每个括号表达式单独执行


icc2_shell> regsub a.*c$  abc\nabc\nabc   xxx
xxx

         默认情况下会\n会被匹配到,导致整个字符串都被替换成xxx


icc2_shell> regsub  -linestop  a.*c$  abc\nabc\nabc   xxx
abc
abc
xxx

        当增加了-linestop后,能够识别换行符,且匹配替换机制在最后一个换行符前结束。

      -lineanchor

        改变与(and)的行为,不识别换行符(单独执行貌似没有什么效果)

icc2_shell> regsub -lineanchor  a.*c$  abc\nabc\nabc   xxx
xxx

         但是当-linestop 与 -lineanchor同时应用时 与 -line效果一致 


icc2_shell> regsub -lineanchor -linestop   a.*c$   abc\nabc\nabc  xxx
xxx
abc
abc

icc2_shell> regsub -line   a.*c$  abc\nabc\nabc   xxx
xxx
abc
abc

      -nocase

        忽略大小写

      -- 

        表示option结束,后面的参数将被视为exp,即便有-开头。下面的例子中--后的-all被当作exp

icc2_shell> regsub -nocase -- -all (ab)(-all)cd  xx
(ab)(xx)cd
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值