`

用PowerShell对字符串处理

 
阅读更多
本篇文章引用的小例子来自如下链接:
 
这是一篇很不错的精华文章, 主要讨论了使用expr命令和Bash扩展的一些字符串操作.
这里我将会大量使用.Net Framework 2.0 类库 System 名字空间中 String 类的各种方法.
 
1. 我们来看Shell中求字符串长度的例子:
 

%x="abcd"
#方法一
%expr length $x
4
# 方法二
%echo ${#x}
4
# 方法三
%expr "$x" : ".*"
4

我们需要这么多种办法嘛??我觉得一种就够了. PowerShell中, 调用字符串长度的属性就可以返回字符串长度了, 如下:

PS C:\> "abcd"
abcd
PS C:\> "abcd".length
4

PowerShell看起来是不是更加的清楚呢?

2. 我们接下来看看shell中 查找子串:

%expr index $x "a"
1
%expr index $x "bc"
2
%expr index $x "cd"
3

expr返回的数组下标是从1开始计数的. 看看PowerShell怎么应付呢?

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

OK, PowerShell的数组下标和大部分编程语言一致, 数组下标是从0开始计算的.

3. 在Shell中得到子字符串:

# 方法一
# expr 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

来看看PowerShell的Substring方法吧

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:\>

PowerShell不允许在对字符串操作过程中, 出现越界的情况. 因此其中一个例子给出了错误信息. 但是接下来我使用trap关键字, 将执行的异常捕获. 因此, 这次操作就什么都没有输出.

4. shell中匹配正则表达式:

# 打印匹配长度
%expr match $x "."
1
%expr match $x "abc"
3
%expr match $x "bc"
0

这里可以看到, expr支持正则表达式, 匹配后给出了匹配的长度. 我们看看PowerShell内置的正则表达式运算符:

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

这里三个语句都发出了自己的执行结果, -match操作符返回bool值, 提示是否匹配成功. 如果匹配成功可以通过访问$matches这个hashtable获得返回情况. 默认整个正则表达式匹配的信息被放在key = 0的位置. 如果匹配不成功, $matches的信息是不会被更新的. 这些行为和Perl几乎一样. 熟悉Perl的朋友是不是觉得这个地方很自然??相比使用expr, 虽然这里复杂了一些, 但是功能确强大了很多.

5. 在Shell中对字符串的掐头去尾

%x=aabbaarealwwvvww
%echo "${x%w*w}"
aabbaarealwwvv
%echo "${x%%w*w}"
aabbaareal
%echo "${x##a*a}"
lwwvvww
%echo "${x#a*a}"
bbaarealwwvvww

哎呀, 这个奇怪的表达式, 看起来让人费解呢...>_<看看-replace运算符是如何工作的吧^^

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

第一个例子用PowerShell好像不容易呢...因为-replace是整行匹配的. 这点上不如Perl的s:::功能强大. 我先给出第二个的办法...^^也许以后会想到好办法呢

PS C:\> $x='abcdabcd'
PS C:\> $x -replace 'a','b'
bbcdbbcd

写到这里, 我想大家也能感受到PowerShell的一些特性, 正如我的理解, 所有.Net程序员, 天生对PowerShell中大部分功能是非常熟悉的. 可以直接调用.Net上的方法, 为PowerShell扩展了强大的功能.

我再给几个比较有意思的功能:

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

Trim是个常见的功能, 还有TrimStart, TrimEnd. ToUpper, ToLower更是很方便的功能.

分享到:
评论

相关推荐

    PowerShell中字符串分行显示的两种方法技巧

    在PowerShell脚本编写过程中,有时我们需要将一个长字符串按照指定的长度分段显示,以便于阅读或处理。本文将详细介绍PowerShell中实现字符串分行显示的两种方法,并提供具体的代码示例。 #### 方法一:使用循环 ...

    PowerShell中使用Out-String命令把对象转换成字符串输出的例子

    本文介绍在PowerShell中如何将cmdlet输出的对象,转换为string字符串类型,便于后期的处理。 PowerShell中的cmdlet输出的结果都是以对象(Object)的形式存在的。对于Object类型,在后期处理时有利有弊,当然利大于...

    PowerShell中使用正则表达式匹配字符串实例

    在讨论PowerShell中使用正则表达式匹配字符串实例时,首先需要对PowerShell有所了解。PowerShell是一种基于.NET Framework的命令行壳层和脚本语言,设计用于自动化管理任务。PowerShell提供了强大的文本处理能力,...

    PowerShell中使用正则表达式跨行匹配字符串的方法

    在实际应用中,PowerShell脚本编写者需要注意,当处理跨行字符串匹配问题时,应考虑到正则表达式的默认行为,并适时使用(?s)这一修饰符来改变匹配模式。这不仅可以提高脚本对多行文本处理的准确性和灵活性,还可以...

    PowerShell实现在字符串中查找大写字母

    同时,`IsUpper()`函数在性能上也相当不错,对于大型字符串处理也很适用。 总的来说,掌握如何在PowerShell中利用.NET Framework的功能,如`IsUpper()`函数,能够极大地扩展我们处理字符串的能力,提高代码的效率和...

    japanese-string-utils-ps:用于Powershell的日语字符串工具

    "japanese-string-utils-ps" 是一个专门为Powershell设计的日语字符串处理工具集。这个工具包专注于处理和操作日语文本,为Powershell用户提供了一系列方便的功能,使得在脚本编程中处理日文字符变得更加简单。 在...

    如何在一个长文件中查找某一个特定的字符串 (2KB)...

    在IT领域,对大型文本文件进行搜索和查找特定字符串是一项常见的任务,特别是在处理源代码文件时。本篇文章将深入探讨如何高效地在一个长文件中查找指定的字符串,并以提供的两个文件"SCAN.BAS"(一个BASIC语言源...

    access连接字符串

    - **自动化脚本**: 使用批处理脚本或PowerShell脚本进行数据迁移或处理时,连接字符串是连接源和目标数据库的桥梁。 #### 4. **最佳实践** - **安全性**: 避免在代码中硬编码用户名和密码,而是考虑使用环境变量或...

    java+powershell 控制windows

    在 Java 中,这可以通过构建相应的 PowerShell 命令字符串并执行来实现。 3. **调整音量**: PowerShell 可以通过 `Set-AudioDevice` cmdlet 来改变系统音量。需要先获取音频设备信息,然后设置音量级别。在 Java ...

    PowerShell中的转义字符是什么?

    在PowerShell中,转义字符是用来指示特殊字符不应被解释为具有特殊含义,而是作为普通文本处理的...在编写脚本时,特别是在处理字符串和正则表达式时,务必注意何时需要使用转义字符来保持代码的清晰和功能的正确性。

    PowerShell概要PowerShell Succinctly

    以下是对上述文件内容的知识点提炼,其中将介绍PowerShell的基本概念、版本、环境配置、执行策略、命令运行方式、交互式Shell的使用、PowerShell snap-ins的应用、.NET类的使用、管道操作、变量管理、属性获取、输出...

    批量替换字符串 .

    在IT行业中,批量替换字符串是一项常见的任务,尤其在文本处理、代码编辑或数据清理时。这个操作涉及到遍历指定文件夹及其子文件夹中的所有指定类型的文件,并将这些文件内的特定字符串替换为新的字符串。标题“批量...

    chinaUnix上关于powershell的实用总结

    在PowerShell中,字符串处理是一项非常重要的技能,特别是在处理文本数据时。本文将介绍一种高效的字符串处理方式,即如何将字符串中的特定字符替换为指定的数值。 **详细说明:** 在PowerShell中处理字符串时,...

    将powershell负载编码为bat文件

    然后,使用PowerShell的`ConvertTo-Base64`命令将脚本内容编码为Base64字符串: ```powershell $encodedCommand = [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes((Get-Content -Path ...

    Windows PowerShell应用手册

    - **字符串处理**:包括字符串的拼接、分割、替换等常见操作。 - **非结构化文本处理**:如日志文件分析,涉及正则表达式匹配等高级技术。 - **计算与数学运算**:支持基本算术运算以及复杂数学函数。 #### 三、...

    PowerShell语言快速参考

    7. **布尔值和运算符**:PowerShell中的布尔值可以是TRUE、FALSE,也可以是长度大于0的字符串(除了单词“false”)、非零数字等。 - 布尔运算符包括AND、OR、NOT等。 8. **控制结构**: - **Break**:用于提前...

    BAT批处理脚本-文本操作-计算字符串长度.cmd.zip

    例如,你可以先定义一个变量来存储字符串,然后使用`for`命令中的`tokens`和`delims`选项来分割字符串,通过计数器记录分割的次数,从而得到字符串的长度。此外,还可以利用批处理内部命令`cmd`的`/c`选项和`findstr...

    powershell中英文教程

    PowerShell处理的是对象,而非文本字符串。例如,`Get-Process`命令会返回一个包含所有运行进程的对象列表。了解这些对象的属性和方法是掌握PowerShell的关键。 5. **模块与Cmdlets** PowerShell支持模块化,允许...

    Windows PowerShell 2.0

    这使得用户能够更方便地处理和操作数据,而不是仅仅依赖文本字符串。 2. **Cmdlets(命令lets)**:PowerShell的核心是其内置的Cmdlets,这些是专门设计用于特定任务的小型、独立的命令。例如,`Get-Process`用于...

Global site tag (gtag.js) - Google Analytics