使用powershell跳过每1行

时间:2018-07-04 08:48:04

标签: powershell

我想编写一个每次跳过1行的脚本。

我的文本文件如下所示:

Java 8 update
{243453-4544-34534-6565-7676772345}
Java 7 update
{23444-554-565767-435234-5426564647}

我想编写应该跳过字符串的PowerShell脚本。

预期输出:

{243453-4544-34534-6565-7676772345}
{23444-554-565767-435234-5426564647}

这是示例文本文件,但我有200行文本文件,其格式相同(1行字符串,下一行是产品代码)。

请为此提供帮助。

4 个答案:

答案 0 :(得分:1)

我使用以下脚本得到了答案。

$codes= Get-Content %path to text file" | where {$_ -notmatch 'Java'}

Foreach($code in $codes)
{
write-host $code
}

答案 1 :(得分:0)

您可以尝试获取所有不包含“ java”的行:

Get-Content .\data.txt | 
    Where-Object {$_ -notlike "*java*"}

这假定无效行包含该单词,但不保证返回的行包含正确的值。最好对所需的字符串进行正匹配,如下所示:

Get-Content .\data.txt | 
    Select-String -Pattern "{(\d+-){4}\d+}"

这将得到包含数字模式的行,而不管它们如何间隔(因此,即使它们是第一行,第九行,第十二行和第28行)。

最后,如果您真的想每隔一行,无论内容如何,​​请尝试modulus operator%):

$i=1
Get-Content .\data.txt | 
    Where-Object {-not ($i++ % 2)}

这项技术的优点是,您可以通过将'2'替换为'3'来获得每第3行,或者通过用'4'替换而获得每4行,等等。

答案 2 :(得分:0)

我通过使用以下代码获得了所需的输出

$ code =获取内容%file的路径|选择字符串'^ {[A-Z0-9] {8}-([A-Z0-9] {4}-){3} [A-Z0-9] {12}} $'

答案 3 :(得分:0)

有很多方法。如果不是Java,则不是Java。 您可以在循环中引入if语句来检查变量的其余部分。

$check=1
Foreach($line in (gc file.tx)){
   If (($check % 2) -eq 0){
      Do commands
   }
   $check = $check + 1
}

也将-eq 0更改为1将返回相反的行