我一直在尝试使用PowerShell从.txt文件中的多行中提取某些等于import React from "react";
function createTab(page, props) {
return (<li className="nav-item">
<a href={"#" + page} onClick={() => props.handlePageChange(page)} className={"nav-link" + (props.currentPage === page? " active" : "")}>
{page}
</a>
</li>)
};
function NavTabs(props) {
return (
<ul className="nav nav-tabs">
{createTab("Home", props)}
{createTab("About", props)}
{createTab("Blog", props)}
{createTab("Contact", props)}
</ul>
);
};
export default NavTabs;
的值来获取倒数第六个单词。
到目前为止,我已有代码:
40
Txt文件:(可能是重复的行,例如hostname01)
$file = Get-Content 'c:\temp\file.txt'
$Array = @()
foreach ($line in $file)
{
$Array += $line.split(",")[6]
}
$Array
$Array | sc "c:\temp\export2.txt"
这就是我想要的:
4626898,0,3,0,POL,INCR,hostname01,xx,1549429809,0000000507,1549430316,xxx,0,40,1,xxxx,51870834,5040,100
4626898,0,3,0,POL,INCR,hostname02,xx,1549429809,0000000507,1549430316,xxx,0,15,1,xxxx,51870834,5040,100
4626898,0,3,0,POL,INCR,hostname03 developer host,xx,1549429809,0000000507,1549430316,xxx,0,40,1,xxxx,51870834,5040,100
4626898,0,3,0,POL,INCR,hostname01,xx,1549429809,0000000507,1549430316,xxx,0,40,1,xxxx,51870834,5040,100
答案 0 :(得分:3)
这不是 fast 解决方案,而是便捷灵活的解决方案:
由于您的文本文件实际上是CSV文件,因此您可以使用Import-Csv
。
Import-Csv
参数将其提供给-Header
。7
(主机名)和14
(其值应为40
的列)感兴趣,因此我们需要提供(我们选择的)列名对于第1至14列。 Import-Csv
方便地将CSV行转换为(自定义)对象,您可以使用Where-Object
查询其属性,并使用Select-Object
进行选择性提取;添加-Unique
会抑制重复值。
将它们放在一起:
Import-Csv c:\temp\file.txt -Header (1..14) |
Where-Object 14 -eq 40 |
Select-Object -ExpandProperty 7 -Unique
为方便起见,我们使用范围表达式(1
命名了列2
,1..14
,...,但是您可以随意使用描述性名称
假设c:\temp\file.txt
包含您的示例数据,以上结果将得出:
hostname01
hostname03 developer host
要输出到文件,请将上面的内容通过管道传递到Set-Content
,如您的问题:
... | Set-Content c:\temp\export2.txt
答案 1 :(得分:0)
您可以使用非捕获组在字符串中查找正确的格式,并使用第一个捕获组$1
引用6个元素的名称:
(?:\d+,\d,\d,\d,[A-Z]+,[A-Z]+,)([a-zA-Z 0-9]+)
(?: )
-指定一个非捕获组(意味着不会像通常使用捕获组那样通过$ 1或$ 2对其进行引用\d+,
(我不会重复所有这些操作,但要查找一个或多个数字,然后是文字,
。[A-Z]+,
-查找全部为大写字母的字符串,然后是文字,
(这会出现两次)。a-z
,A-Z
,空格和数字直到字符不在此集合中(在这种情况下为逗号)。为您提供所需的文字。答案 2 :(得分:0)
如果所需字段始终是行中的第6个,则更容易拆分每行并获取第6个成员:
Get-Content 'c:\temp\file.txt' | Foreach-Object {($_ -split ',')[6]} | Select-Object -Unique
答案 3 :(得分:0)
以下应与您要尝试的工作一起使用
Get-Content 'c:\temp\file.txt' | %{
$_.Split(',')[6]
}| select -Unique