Board logo

标题: [转载代码] PowerShell对字符串中包含数字的部分进行数值运算 [打印本页]

作者: DAIC    时间: 2013-10-21 10:13     标题: 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




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2