我正在寻找一种从文本文件中导出所有行的方法,其中行的一部分与某个字符串匹配。该字符串实际上是文件的前4个字节,我想保持命令只检查那些字节;不是整行。我想写整行。我该怎么做呢?
我只使用Windows,但没有选择使用许多其他可能会这样做的工具。
提前感谢您的帮助。
答案 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*'}