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/