从行中删除特定字符并将其连接

时间:2019-06-14 05:59:28

标签: powershell

我有一个问题,我需要从一行中剪切特定的字符,然后将该行与下一行(用逗号分隔)连接起来。 考虑有一个文本文件abc.txt,我需要文件的最后3行。最后3行的格式如下:

11/7/2000 17:22:54 -  Hello world.
19/7/2002 8:23:54  - Welcome to the new technology.
24/7/2000 9:00:13 - Eco earth                                                     

我需要从每行中删除开始时间戳,然后将行连接为

Hello world.,Welcome to the new technology,Eco earth.

时间戳记不是静态的,我想使用正则表达式

我尝试了以下操作:

$Words = (Get-Content -Path .\abc.txt|Select-Object -last 3|Out-String)
$Words = $Words -split('-')
$regex = "[0-9]{1,2}/[0-9]{1,2}/[0-9]{1,4} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}):[0-9]{1,3}"

我以前得到的输出就像

11/7/2000 17:22:54 
Hello world
19/7/2002 8:23:54 
Welcome to the new technology.
24/7/2000 9:00:13 
Eco earth

3 个答案:

答案 0 :(得分:0)

尝试一下:

Get-Content "C:\temp\example.txt" | %{
$array=$_ -split "-", 2
$array[1].Trim()
}

答案 1 :(得分:0)

无需创建正则表达式来试图弄清楚时间戳部分,因为您还是想跳过它。

这应该有效:

# read the file and get the last three lines as string array
$txt = Get-Content -Path 'D:\abc.txt' -Tail 3

# loop through the array and change the lines as you go
for ($i = 0; $i -lt $txt.Count; $i++) {
    $txt[$i] = ($txt[$i] -split '-', 2)[-1].Trim()
}
# finally, join the array with commas
$txt -join ','

输出:

  

您好,世界,欢迎使用新技术,生态地球

答案 2 :(得分:0)

例如,当您有:“ DATE-blablabla”

如果您对它执行.Split("-"),则会得到:

Date 
 blablabla

您可以做的是$ string.Split(“-”)[Which_Line]->这样

$string="12/15/18 08:05:10 - Hello World."
$string=$string.Split("-")[1] 

返回值:Hello world.(前面有空格)

现在可以在字符串上应用Trim()函数-它删除字符串前后的空格

$string=$string.Trim()

给你Hello world.


对于您的答案,如果它是静态用法(总是3):

$Words = (Get-Content -Path .\abc.txt|Select-Object -last 3|Out-String).Split("-")
$end=$Words[2].Trim() + "," + $Words[4].Trim() + "," + $Words[6].Trim()