[原创]用PowerShell对字符串处理
2007-08-04 12:22
337 查看
作者: Edengundam(马涛)
本篇文章引用的小例子来自如下链接:
http://bbs.chinaunix.net/viewthread.php?tid=201843&extra=page%3D1
这是一篇很不错的精华文章, 主要讨论了使用expr命令和Bash扩展的一些字符串操作.
这里我将会大量使用.Net Framework 2.0 类库 System 名字空间中 String 类的各种方法.
1. 我们来看Shell中求字符串长度的例子:
我们需要这么多种办法嘛??我觉得一种就够了. PowerShell中, 调用字符串长度的属性就可以返回字符串长度了, 如下:
PowerShell看起来是不是更加的清楚呢?
2. 我们接下来看看shell中 查找子串:
expr返回的数组下标是从1开始计数的. 看看PowerShell怎么应付呢?
OK, PowerShell的数组下标和大部分编程语言一致, 数组下标是从0开始计算的.
3. 在Shell中得到子字符串:
来看看PowerShell的Substring方法吧
PowerShell不允许在对字符串操作过程中, 出现越界的情况. 因此其中一个例子给出了错误信息. 但是接下来我使用trap关键字, 将执行的异常捕获. 因此, 这次操作就什么都没有输出.
4. shell中匹配正则表达式:
这里可以看到, expr支持正则表达式, 匹配后给出了匹配的长度. 我们看看PowerShell内置的正则表达式运算符:
这里三个语句都发出了自己的执行结果, -match操作符返回bool值, 提示是否匹配成功. 如果匹配成功可以通过访问$matches这个hashtable获得返回情况. 默认整个正则表达式匹配的信息被放在key = 0的位置. 如果匹配不成功, $matches的信息是不会被更新的. 这些行为和Perl几乎一样. 熟悉Perl的朋友是不是觉得这个地方很自然??相比使用expr, 虽然这里复杂了一些, 但是功能确强大了很多.
5. 在Shell中对字符串的掐头去尾
哎呀, 这个奇怪的表达式, 看起来让人费解呢...>_<看看-replace运算符是如何工作的吧^^
你会用正则表达式嘛??如果你会, 那么上面的操作, 用正则表达式表示不是很简单嘛?
6. 在Shell中字符串的替换
这里不允许使用regex呢..不过可以用*,?...
第一个例子用PowerShell好像不容易呢...因为-replace是整行匹配的. 这点上不如Perl的s:::功能强大. 我先给出第二个的办法...^^也许以后会想到好办法呢
写到这里, 我想大家也能感受到PowerShell的一些特性, 正如我的理解, 所有.Net程序员, 天生对PowerShell中大部分功能是非常熟悉的. 可以直接调用.Net上的方法, 为PowerShell扩展了强大的功能.
我再给几个比较有意思的功能:
Trim是个常见的功能, 还有TrimStart, TrimEnd. ToUpper, ToLower更是很方便的功能.
本篇文章引用的小例子来自如下链接:
http://bbs.chinaunix.net/viewthread.php?tid=201843&extra=page%3D1
这是一篇很不错的精华文章, 主要讨论了使用expr命令和Bash扩展的一些字符串操作.
这里我将会大量使用.Net Framework 2.0 类库 System 名字空间中 String 类的各种方法.
1. 我们来看Shell中求字符串长度的例子:
%x="abcd" #方法一 %expr length $x 4 # 方法二 %echo ${#x} 4 # 方法三 %expr "$x" : ".*" 4 |
PS C:/> "abcd" abcd PS C:/> "abcd".length 4 |
2. 我们接下来看看shell中 查找子串:
%expr index $x "a" 1 %expr index $x "bc" 2 %expr index $x "cd" 3 |
PS C:/> $x="abcd" PS C:/> $x.IndexOf('a') 0 PS C:/> $x.IndexOf('b') 1 PS C:/> $x.IndexOf('bc') 1 PS C:/> $x.IndexOf('cd') 2 PS C:/> $x.IndexOf('ef') -1 |
3. 在Shell中得到子字符串:
# 方法一 # expr <string> startpos length %expr substr "$x" 1 3 abc %expr substr "$x" 1 5 abcd %expr substr "$x" 2 5 bcd # 方法二 # ${x:pos:lenght} %echo ${x:1} bcd %echo ${x:2} cd %echo ${x:0} abcd %echo ${x:0:2} ab %pos=1 %len=2 %echo ${x:$pos:$len} bc |
PS C:/> $x abcd PS C:/> $x.Substring(0, 2) ab PS C:/> $x.Substring(0, 4) abcd PS C:/> $x.Substring(0, 6) Exception calling "Substring" with "2" argument(s): "Index and length must refer to a location within the string. Parameter name: length" At line:1 char:13 + $x. Substring( <<<< 0, 6) PS C:/> trap { $x.Substring(0, 6) } PS C:/> |
4. shell中匹配正则表达式:
# 打印匹配长度 %expr match $x "." 1 %expr match $x "abc" 3 %expr match $x "bc" 0 |
PS C:/> $x -match '.'; $matches[0]; ($matches[0]).length True a 1 PS C:/> $x -match 'abc'; $matches[0]; ($matches[0]).length True abc 3 PS C:/> $x -match 'dc'; $matches[0]; ($matches[0]).length False abc 3 |
5. 在Shell中对字符串的掐头去尾
%x=aabbaarealwwvvww %echo "${x%w*w}" aabbaarealwwvv %echo "${x%%w*w}" aabbaareal %echo "${x##a*a}" lwwvvww %echo "${x#a*a}" bbaarealwwvvww |
PS C:/> $x = 'aabbaarealwwvvww' PS C:/> $x -replace 'w*$' aabbaarealwwvv PS C:/> $x -replace 'w.*w$' aabbaareal PS C:/> $x -replace '^a.*a' lwwvvww PS C:/> $x -replace '^a*' bbaarealwwvvww PS C:/> |
6. 在Shell中字符串的替换
这里不允许使用regex呢..不过可以用*,?...
%x=abcdabcd %echo ${x/a/b} # 只替换一个 bbcdabcd %echo ${x//a/b} # 替换所有 bbcdbbcd |
PS C:/> $x='abcdabcd' PS C:/> $x -replace 'a','b' bbcdbbcd |
我再给几个比较有意思的功能:
PS C:/> $x abcdabcd PS C:/> $x.ToUpper() ABCDABCD PS C:/> $x.ToUpper().ToLower() abcdabcd PS C:/> $x='abcdabcdab' PS C:/> $x.Trim('ab') cdabcd |
相关文章推荐
- 【原创】字符串处理函数 - str*和sizeof
- [原创]PowerShell处理文本文件
- (原创)SQL Server中几种特殊的“字符串到列表”的处理函数
- [原创][PowerShell教程][08]字符串字面值
- C#字符串的处理(原创)--王超C#
- [原创]使用PowerShell替换字符串中某个字符为特定数值
- Powershell 字符串处理
- [原创]linux c 字符串相关处理包装函数
- Powershell 字符串处理案例
- 关于JSON字符串的处理与总结 【原创】
- powershell 字符串处理提取
- (原创)c#学习笔记05--变量的更多内容03--字符串的处理
- [原创]在PowerShell中实现Ruby字符串类型方法swapcase
- 【原创】字符串处理函数使用和结果
- 文本处理 - 除去字符串两端的空格
- 字符串、字符处理总结
- 让HGE支持中文(3) - HGE字符串处理
- poj3211Washing Clothes(字符串处理+01背包) hdu1171Big Event in HDU(01背包)
- JAVA第七弹(字符串特性以及处理)
- 字符串处理神器——Python Regular Expression