- 帖子
- 2874
- 积分
- 7021
- 技术
- 336
- 捐助
- 0
- 注册时间
- 2011-6-2
|
[转载代码] PowerShell对字符串中包含数字的部分进行数值运算
本篇文章引用的小例子来自如下链接:
http://bbs.chinaunix.net/thread-957179-1-1.html
将A12中的数值12进行减法运算, 变成A11.
PowerShell的脚本, 我用了正则表达式, 这里确实没有对应的bash处理简单, 但是我增加了一句异常处理, 这样用bash就需要先用其他手段检查字符串是否符合要求:
PS C:\> if("a12" -match "(\D+)(\d+)") {"$([string] $matches[1])$($matches[2] - 1)"} else {throw "Input Error"}
a11
PS C:\> if("a12a" -match "^(\D+)(\d+)$") {"$([string] $matches[1])$($matches[2] - 1)"} else {throw "Input Error"}
Input Error
At line:1 char:91
+ if("a12a" -match "^(\D+)(\d+)$") {"$([string] $matches[1])$($matches[2] - 1)"} else {throw <<<< "Input Error"}
PS C:\>
|
网中人(netman)老大给出Bash解法:
$ A=a13
$ echo ${A//[0-9]}$((${A//[!0-9]}-1))
a12
|
throw抛出的异常是一种捕获异常的好办法, C#, java的try, catch, finally, Perl的eval等都有类似能力. 同时注意$matches保存了最近一次正则表达式匹配的信息. 如下方法可以查看该HashTable的内容:
PS C:\> $matches
Name Value
---- -----
2 12
1 a
0 a12
|
也许这个处理PowerShell确实代码复杂了些, 但主要还是我对PowerShell不熟悉, 也许以后我会找到更好的办法呢^^
http://blog.chinaunix.net/uid-9781829-id-1997700.html |
|