我想编写一个每次跳过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行字符串,下一行是产品代码)。
请为此提供帮助。
答案 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将返回相反的行