电源外壳。根据文件中的字符串写出行

时间:2014-02-04 10:33:53

标签: powershell

我正在寻找一种从文本文件中导出所有行的方法,其中行的一部分与某个字符串匹配。该字符串实际上是文件的前4个字节,我想保持命令只检查那些字节;不是整行。我想写整行。我该怎么做呢?

我只使用Windows,但没有选择使用许多其他可能会这样做的工具。

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:5)

你想表演一个简单的" grep"?然后试试这个

select-string .\test.txt -pattern "\Athat" | foreach {$_.Line} 

或者这个(非常相似的正则表达式),也写入outfile

select-string .\test.txt -pattern "^that" | foreach {$_.Line} | out-file -filepath out.txt

这假设您要搜索一个4字节的字符串""分别在字符串的开头或行的开头。

答案 1 :(得分:1)

以下Powershell功能应该适合您:

function Get-Lines {
    [cmdletbinding()]
    param(
        [string]$filename,
        [string]$prefix
    )

    if( Test-Path -Path $filename -PathType Leaf -ErrorAction SilentlyContinue ) {
        # filename exists, and is a file
        $lines = Get-Content $filename
        foreach ( $line in $lines ) {
            if ( $line -like "$prefix*" ) {
                $line
            }
        }
    }
}

要使用它,假设您将其保存为get-lines.ps1,您可以将该函数加载到内存中:

. .\get-lines.ps1

然后使用它,您可以搜索以“DATA”开头的所有行,例如:

get-lines -filename C:\Files\Datafile\testfile.dat -prefix "DATA"

如果您需要将其保存到其他文件以供日后查看,您可以执行以下操作:

get-lines -filename C:\Files\Datafile\testfile.dat -prefix "DATA" | out-file -FilePath results.txt

或者,如果我更清醒,你可以忽略上面的脚本,使用一个更简单的解决方案,如下面的单行:

get-content -path C:\Files\Datafile\testfile.dat | select-string -Pattern "^DATA"

只使用^ regex字符确保它只在每行的开头查找“DATA”。

答案 2 :(得分:0)

从c:\ somedir \ somefile.txt获取以' abcd'开头的所有行。 :

(get-content c:\somedir\somefile.txt) -like 'abcd*'

提供c:\ somedir \ somefile.txt不是一个异常大(数百MB)的文件。对于那种情况:

get-content c:\somedir\somefile.txt -readcount 1000 |
 foreach {$_ -like 'abcd*'}