当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何在 PowerShell 中使用子字符串

作者:精品下载站 日期:2024-12-14 03:42:40 浏览:11 分类:玩电脑

如何在 PowerShell 中使用子字符串


当您想在 PowerShell 中提取字符串的一部分时,我们可以使用 Substring() 方法。此方法允许我们指定要从字符串中提取的子字符串的开头和长度。

在本文中,我将解释 Substring 方法的工作原理,并向您展示几个如何使用 startIndex 和/或 length 函数获取字符串部分的示例。

在 PowerShell 中使用子字符串方法

Substring 方法可用于 PowerShell 中的任何字符串对象。这可以是文字字符串或任何字符串类型的变量。

要使用该方法,我们需要指定要提取的字符串的起点。我们可以选择指定要提取的长度(字符数)。

Substring(startIndex, length)

建议

请记住,字符串从位置 0 而不是 1 开始

这种方法最好借助示例来解释,所以让我们从下面著名的字符串“hello world”开始。要从字符串中仅提取单词 world,我们可以使用以下命令:

"Hello World".Substring(6)

# Result
World

我们只指定了子字符串的起始点 6。这样该方法将提取从字符串位置 6 开始的所有字符。

为了更好地解释每个字符的位置,我对字符串每个字母下方的位置进行了编号。如您所见,位置 6 是字母 W

Hello World
012345678910

如果我们只想从字符串中提取单词 Hello,那么我们需要指定 startIndex 为 0,长度为 5 个字符:

"Hello World".Substring(0,5)

# Result
Hello

使用动态字符串

使用动态字符串时,您并不总是知道字符串的长度。为此,我们可以在 substring 方法中使用字符串长度函数。

假设我们有一个包含日志文件的文件夹,我们要从中提取不带扩展名的文件名。文件名本身可以有不同的长度,但在本例中,扩展名是 3 个字母和一个点。

因此,只保留文件名,我们可以获得文件名的长度并从中减去 4 个字符:

$filename = "la-ams-file02-log-1.log"

$filename.Substring(0, $filename.Length - 4)

# Result
la-ams-file02-log-1

我们也可以以相反的方式使用它,只从文件名中获取扩展名。我们根据文件名的长度确定起始位置,并指定长度为3个字符:

$filename = "la-ams-file02-log-1.log"
$filename.Substring($filename.Length - 3, 3)

# Result
log

在这种情况下,我们实际上不需要指定要返回的子字符串的长度(3),因为我们可以简单地返回剩余的字符:

$filename.Substring($filename.Length - 3)

# Result
log

在子字符串中使用 IndexOf

当处理动态字符串长度时,您有时想要提取字符串中间的部分。接下来的挑战是找到/计算子字符串方法的确切起始位置。

执行此操作的一种选择是使用 IndexOf。此方法允许您查找字符串中字符或字符串的位置。

让我们回到日志文件示例。我添加了一个完全无用的日期格式,长度不一致。要仅从日志文件名称中获取日期,我们可以使用 IndexOf() 方法。

我们将在字符串中搜索日期 -log 之前的唯一部分。 IndexOf 方法将返回您搜索的字符串或字符的起始位置,因此在这种情况下,我们需要向其添加 4 个字符:

$files = @(
    'la-ams-ad01-log-202223.log',
    'la-ams-ad01-log-2022113.log',
    'la-osl-ad01-log-2022113.log',
    'la-osl-file01-log-202214.log'
)
$files | Foreach {
    # Get the position of the substring 'log-' in each filename and add 4 to this position.
    $part = $_.Substring($_.IndexOf('log-') + 4)
    # Returns 202223.log for example
 
    # Remove the extension from the substring
    $date = $part.Substring(0, $part.Length - 4)
    write-host $date
    # Returns 202223 for example
}

在这种特殊情况下,您还可以在文件名的连字符中使用 LastIndexOf() 方法:

$files | Foreach {
    $part = $_.Substring($_.LastIndexOf('-') + 1)
    write-host $part

    $date = $part.Substring(0, $part.Length - 4)
    write-host $date
}

总结

在 PowerShell 中处理字符串时,您可能会经常使用 substring 方法。请记住,您始终可以将子字符串方法与其他字符串运算符(例如拆分或替换)结合使用。

我希望这篇文章对您有用,如果您有任何疑问,请在下面发表评论。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯