Powershell 如何获取端点为回车符和/或换行符的子字符串?
如果我不知道我想要的东西的长度,但我知道它的结尾是一个CR/LF,那么我如何获取子字符串 我正在与服务器通信,试图提取一些信息。子字符串的起点定义良好,但终点可以是可变的。在其他脚本语言中,我希望会有一个Powershell 如何获取端点为回车符和/或换行符的子字符串?,powershell,c#,Powershell,C#,如果我不知道我想要的东西的长度,但我知道它的结尾是一个CR/LF,那么我如何获取子字符串 我正在与服务器通信,试图提取一些信息。子字符串的起点定义良好,但终点可以是可变的。在其他脚本语言中,我希望会有一个find()命令,但在PowerShell中还没有找到。大多数文章和SE问题涉及获取内容、子字符串、和选择字符串,目的是替换CRLF,而不仅仅是查找它 我正在与之通信的设备具有类似telnet的命令结构。它以它的模型作为提示开始。您可以向它发出命令,它会做出响应。我正试图从中获取主机名。这就是终
find()
命令,但在PowerShell中还没有找到。大多数文章和SE问题涉及获取内容
、子字符串
、和选择字符串
,目的是替换CRLF,而不仅仅是查找它
我正在与之通信的设备具有类似telnet的命令结构。它以它的模型作为提示开始。您可以向它发出命令,它会做出响应。我正试图从中获取主机名。这就是终端中的提示、命令和响应:
TSS-752>hostname
Host Name: ThisIsMyHostname
TSS-752>
我想提取主机名。我遇到了IndexOf()
,它的工作方式似乎与我正在寻找的find命令类似。“:”是一个很好的起点,然后我想将其截断到下一个CRLF
注意:我已经使我的代码工作到了我满意的程度,但是为了不再收到反对票(在撰写本文时为3票)或再次被禁止,我不会发布解决方案,也不会删除问题。这些都是这里的禁忌。考虑到从评论中获得更多信息的请求只会让我获得否决票,所以我想我只是被困在所谓的第22条军规中。在概述这种完全相同的方法时,您可能已经找到了前20个示例,但下面是PowerShell示例
如果要查找发生CR/LF的索引,请使用String.IndexOf()
:
使用它计算String.Substring()
的length
参数参数:
您是否编写或尝试过任何特定的代码?还没有。我知道我需要使用
子字符串
,但我不知道如何计算它的终点。它需要整数,但没有任何匹配项。您有用例示例吗?如果你提供一个例子和你尝试过的东西,那么帮助会非常有用。如果您正在查找某个内容,但不知道从何处开始使用.IndexOf()
(这可能就是您要查找的内容)将有助于找到起点。或者只是使用正则表达式,因为它更简单。伙计们,这就像教科书级的问题。。这就是为什么我们会做出这样的反应,因为这些类型的问题通常已经在其他地方得到了回答。在大多数情况下,子字符串并不关心字符串的长度。您从索引中提取,它将一直提取到字符串的末尾,除非您量化了一些字符。因为可以查询字符串长度,所以您会事先知道这是否是一个问题。这就是为什么我想看到一个您正试图实现的用例/示例,因为有很多方法可以实现这一点。如果有尾随的新行,又有什么关系呢?您可以使用.Trim()
在之前或之后清除它?
PS C:\> " `r`n".IndexOf("`r`n")
2
$String = " This phrase starts at index 4 ends at some point`r`nand then there's more"
# Define the start index
$Offset = 4
# Find the index of the end marker
$CRLFIndex = $string.IndexOf("`r`n")
# Check that the end marker was actually found
if($CRLFIndex -eq -1){
throw "CRLF not found in string"
}
# Calculate length based on end marker index - start index
$Length = $CRLFIndex - $Offset
# Generate substring
$Substring = $String.Substring($Offset,$Length)