我有一个问题,我需要从一行中剪切特定的字符,然后将该行与下一行(用逗号分隔)连接起来。
考虑有一个文本文件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
答案 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()