Powershell连接线
我的文本文件如下所示: 一,。Powershell连接线,powershell,Powershell,我的文本文件如下所示: 一,。 SometextSometextSometextSometext 二,。 SometextSometextSometextSometext 三,。 SometextSometextSometextSometext 四,。 SometextSometextSometextSometext 我需要删除编号和下方文本之间的回车符,并且编号(.)和移动文本之间需要有空格,如下所示: 现在我正在尝试: $x = Get-Content *FILENAME* $x
SometextSometextSometextSometext 二,。
SometextSometextSometextSometext 三,。
SometextSometextSometextSometext 四,。
SometextSometextSometextSometext 我需要删除编号和下方文本之间的回车符,并且编号(.)和移动文本之间需要有空格,如下所示: 现在我正在尝试:
$x = Get-Content *FILENAME*
$x | Foreach-Object {$_ | select-string "^\d{1,2}\.\s+" }
(注意:我可以匹配选择字符串“^\d{1,2}.\s+”,但之后不知道如何删除换行符或连接文件)
我想要的最终结果:
$lines = Get-Content $my_file
for ($i = 0; $i -le $lines.Count; $i+=3) {
if ($lines[$i] -match '^\d+?\.') {
$lines[$i].TrimEnd() + ' ' + $lines[$i + 1]
}
}
由于管道一次只能工作一行,因此最简单的方法可能是将数字保存在缓冲区中,并在到达下一行时输出:
$x | Foreach-Object {if($_ -match "^\d{1,2}\.\s+"){$num = $_}else{$num+$_;$num="";} }
$x=获取内容$filename-Raw
$x-替换“(\d{1,2}\)\s*\r?\n(+?)(\r?\n |$){2,}”,替换“$1$2$3”
工作原理:
-Raw
参数调用Get Content
,将文件作为单个字符串而不是单个行返回。在本例中,由于使用换行符,因此更容易将其视为一个字符串
,并在组1中捕获该数字
,您想要的行,以及一行结束符(如果存在)这里有一个解决方案。它使用缓冲方法,但不是将
+=
连接到字符串,而是使用StringBuilder,这可以更好地执行。(见附件)
这将产生:
我试试短一点的:
Get-Content $my_file -ReadCount 3 | ForEach{$_ -Join " "}
将其拆分为几组线,并用空格连接它们。不知道为什么它是3而不是2老实说,我只是知道它的工作时,我测试它对你提供的样品。下面是我的测试(我将其保存到C:\Temp\test.txt的文本文件中):
编辑:噢,是3,不是2,因为文本文件中有空行。因此,我认为从技术上讲,这是在每段文本的末尾添加一个空格。可以通过筛选空行来避免这种情况:
Get-Content $my_file -ReadCount 3 | ForEach{($_ | Where{![String]::IsNullorEmpty($_)}) -Join " "}
这可以通过替换选项实现
$FirstLast = "Mohammed
Junaid"
$FirstLast -replace ("`n"," ")
结果将是
"Mohammed Junaid"
我认为你的问题没有任何解决办法。所有的希望都破灭了。一个看似简单的问题怎么会得到5个不同的答案,我敢打赌它们都可能有效(至少在大部分情况下)。@TheMadTechnician文本与Andy Arismnedi一起玩很有趣,我知道你想搞笑,但在网上它却显得很愚蠢:(祝你好运。@NIX100这是一个堆栈溢出问题,你在这个网站上呆了一段时间后就会得到它。管道一次只处理一个对象,但如果该对象是多行字符串,你实际上一次处理多行。@TheMadTechnician很公平,但他不会使用get-content获得多行对象。他将使用-ReadCount:-ReadCount;指定一次通过管道发送的内容行数。默认值为1。值为0(零)时一次发送所有内容。
PS > Get-Content -ReadCount 3 FILENAME | Write-Host
1. SometextSometextSometextSometext
2. SometextSometextSometextSometext
3. SometextSometextSometextSometext
4. SometextSometextSometextSometext
$FirstLast = "Mohammed
Junaid"
$FirstLast -replace ("`n"," ")
"Mohammed Junaid"