PowerShell中的子字符串搜索:快速指南

A common scenario in an admin’s world is to figure out a way to find a certain snippet of text inside a string; called the substring. PowerShell makes finding a substring extremely easy.

相关:学习字符串格式和扩展字符串

宣布一场免费的在线培训 – 开启您的 PowerShell 之旅 – 由 Johan Arwidmark 主讲。了解 PowerShell 技能如何提升您的 IT 职业,学习从哪里开始使用 PowerShell,编写您的第一个脚本,并在实时培训环境中直接向 Johan 提问。

PowerShell 和字符串

在 PowerShell 世界中,字符串由一组用单引号或双引号括起来的字符组成。像 "foo"'bar' 这样的字符串非常常见。

相关:回到基础:PowerShell 字符串

假设您已经在一个变量中定义了一个字符串,只需要找到其中的一部分?例如,假设您有一个包含地址的字符串,如 1234 4th St。您想要提取出数字,并知道前四个字符总是您需要的数字。在这种情况下,您可以使用 PowerShell 的 substring() 方法。

使用 PowerShell 的 SubString 方法

要在 PowerShell 中查找字符串中的字符串,您可以使用 Substring() 方法。这个方法可以在 PowerShell 的每个字符串对象中找到。

例如,也许您有一个类似于The quick brown fox jumped over the fence.的字符串。您想找到前五个字符。您可以使用Substring()方法来实现:

$string = 'The quick brown fox jumped over the fence.'
$string.Substring(0,5)

传递给Substring()方法的第一个参数是最左侧字符的位置。在这种情况下,最左侧的字符是T。第二个参数是最右侧字符位置。在这种情况下,该字符是q

Substring()方法返回它们之间的所有字符。

下面是一个实际示例:

假设我们有一个产品代码,其格式如下:XXXXVVVV-MM-DD-YYYY。所有产品都采用此代码格式,并且不会偏离此格式。现在假设生成此代码的库存管理软件未在数据库中包含创建日期字段。

但是,软件始终将此日期放在产品代码本身中,格式为MM-DD-YYYY,因此我们可以从产品代码推断出这一点。我们需要获取这些产品的日期,以创建一些超级花哨但极其不必要的报告,向管理层显示每个产品何时插入数据库。以下是完成此操作的一种好方法。

$product_code = 'ABCD1234-11-12-2013'
$date_created = [DateTime]$product_code.SubString($product_code.Length-10)

在此示例中,我们使用了PowerShell的SubString()方法,该方法适用于内置的字符串对象,并将要查找的第一个字符的编号作为参数传递。

自从我们没有指定停止字符,它假定我们希望获取字符串的所有字符到末尾。要首先找到数字,我们首先获取整个产品代码的长度,然后从中减去10。在这个例子中,这意味着我们希望从字符串右边的第10个字符开始,以及右边的所有内容。

[DateTime] 类型不一定与帖子的子字符串主题相关,但我认为它与具体的示例很好地契合。

在获取到日期字符串11-12-2013后,我们将其类型转换为 [DateTime] 对象,将曾经是一个普通字符串转换为一个漂亮的对象。从这里,我们可以在其上执行管理要求我们执行的所有繁琐的日期算术,并生成那个漂亮的条形图报告!

使用长度属性动态查找子字符串

在上面的例子中,您静态定义了字符串内字符的起始和结束位置。但如果您不知道最后一个位置呢?

也许您需要找到最后四个字符的子字符串。您需要找到从第四个位置到最后一个位置一直到末尾的字符集。您要搜索的字符串可能是任意长度。

我们可以动态指定结束位置,而不是将结束位置定义为从左边计数的正数。我们可以使用字符串的长度并从中减去一定数量的字符。

使用上述字符串$product_code = 'ABCD1234-11-12-2013',也许您想找到最后四个字符。 而不是像这样做:

PS> $product_code = 'ABCD1234-11-12-2013'
PS> $product_code.SubString(0,4)
ABCD

您可以用0替换$product_code.Length - 4,甚至根本不使用结束位置,它将返回最后四个字符,如下所示。

PS> $product_code = 'ABCD1234-11-12-2013'
PS> $product_code.SubString($product_code.Length-4)
2013

如果您不指定结束位置,PowerShell子字符串方法将始终默认为最后一个字符位置。

使用字符串的length属性,该属性是字符串中字符的总数,并从该计数中减去允许您动态地挑选出子字符串。

宣布一场免费直播培训–开始您的PowerShell之旅–由Johan Arwidmark呈现。了解PowerShell技能如何提升您的IT职业生涯,学习从哪里开始使用PowerShell,构建您的第一个脚本,并在现场培训环境中直接向Johan提问。

Source:
https://adamtheautomator.com/powershell-substring/