PowerShell检索多个文件中的关键字,并将文件名去重后出力到新文件
前言:
在linux服务器上取得Java编译环境各编译文件中相关文件信息时,由于文件数量过多,需要过滤出其中一部分带有关键信息的文件,故简单写成以下脚本文件,提取相关文件名。
代码如下:
## grep
#########################################
#检索文件夹所在路径
$findPath = "C:\wang\PowerShell\test\buildtool"
#出力文件所在路径
$grepKekka = "C:\wang\PowerShell\test\grep\grepKekka.txt"
$grepKekka1 = "C:\wang\PowerShell\test\grep\grepKekka1.txt"
$grepKekka2 = "C:\wang\PowerShell\test\grep\grepKekka2.txt"
# 清空输出文件
Clear-Content $grepKekka -Force
Clear-Content $grepKekka1 -Force
Clear-Content $grepKekka2 -Force
# 检索关键字,输出到文件
Get-ChildItem $findPath -Recurse | Select-String "_W555" | select filename, LineNumber, Line, Path | Format-Table -AutoSize | Out-File -Width 200 -FilePath $grepKekka1 -Append
Get-ChildItem $findPath -Recurse | Select-String "_W555" | select filename | Format-Table -AutoSize | Out-File -Width 200 -FilePath $grepKekka2 -Append
#unique 去除重复行 去除空行 去除'_bk'
$content = Get-Content $grepKekka2 | Sort-Object -Unique | where{$_ -ne ""} | Where-Object {$_ -notmatch '_bk'}
# 去除'Filename' 去除'--------'
$content | Where-Object {$_ -notmatch 'Filename'} | Where-Object {$_ -notmatch '--------'} | Out-File $grepKekka
# 去除 半角空格
(Get-Content $grepKekka) |
foreach { $_ -replace " ", ""} | Set-Content $grepKekka
输入文件:
C:\wang\PowerShell\test\buildtool\build1.sh
C:\wang\PowerShell\test\buildtool\build1.xml
C:\wang\PowerShell\test\buildtool\build2.sh
C:\wang\PowerShell\test\buildtool\build2.xml
C:\wang\PowerShell\test\buildtool\build3.sh
C:\wang\PowerShell\test\buildtool\build3.xml
C:\wang\PowerShell\test\buildtool\build3_bk.sh
C:\wang\PowerShell\test\buildtool\build3_bk.xml
C:\wang\PowerShell\test\buildtool\build5.sh
C:\wang\PowerShell\test\buildtool\build5.xml
输出文件(grepKekka.csv):
build1.sh
build1.xml
build2.sh
build2.xml
build3.sh
build3.xml
输出文件(grepKekka1.csv):
Filename LineNumber Line Path
-------- ---------- ---- ----
build1.sh 1 aaaaaaaaaaaa_W555aaaaaa C:\wang\PowerShell\test\buildtool\build1.sh
build1.sh 3 aaaaaaaaaaaa_W555aaaaaa C:\wang\PowerShell\test\buildtool\build1.sh
build1.sh 5 aaaaaaaaaaaa_W555aaaaaa C:\wang\PowerShell\test\buildtool\build1.sh
build1.xml 1 aaaaaaaaaaaa_W555aaaaaa C:\wang\PowerShell\test\buildtool\build1.xml
build1.xml 3 aaaaaaaaaaaa_W555aaaaaa C:\wang\PowerShell\test\buildtool\build1.xml
build1.xml 5 aaaaaaaaaaaa_W555aaaaaa C:\wang\PowerShell\test\buildtool\build1.xml
build2.sh 1 aaaaaaaaaaaa_W555aaaaaa C:\wang\PowerShell\test\buildtool\build2.sh
build2.sh 3 aaaaaaaaaaaa_W555aaaaaa C:\wang\PowerShell\test\buildtool\build2.sh
build2.sh 5 aaaaaaaaaaaa_W555aaaaaa C:\wang\PowerShell\test\buildtool\build2.sh
build2.xml 1 aaaaaaaaaaaa_W555aaaaaa C:\wang\PowerShell\test\buildtool\build2.xml
build2.xml 3 aaaaaaaaaaaa_W555aaaaaa C:\wang\PowerShell\test\buildtool\build2.xml
build2.xml 5 aaaaaaaaaaaa_W555aaaaaa C:\wang\PowerShell\test\buildtool\build2.xml
build3.sh 1 aaaaaaaaaaaa_W555aaaaaa C:\wang\PowerShell\test\buildtool\build3.sh
build3.sh 3 aaaaaaaaaaaa_W555aaaaaa C:\wang\PowerShell\test\buildtool\build3.sh
build3.sh 5 aaaaaaaaaaaa_W555aaaaaa C:\wang\PowerShell\test\buildtool\build3.sh
build3.xml 1 aaaaaaaaaaaa_W555aaaaaa C:\wang\PowerShell\test\buildtool\build3.xml
build3.xml 3 aaaaaaaaaaaa_W555aaaaaa C:\wang\PowerShell\test\buildtool\build3.xml
build3.xml 5 aaaaaaaaaaaa_W555aaaaaa C:\wang\PowerShell\test\buildtool\build3.xml
build3_bk.sh 1 aaaaaaaaaaaa_W555aaaaaa C:\wang\PowerShell\test\buildtool\build3_bk.sh
build3_bk.sh 3 aaaaaaaaaaaa_W555aaaaaa C:\wang\PowerShell\test\buildtool\build3_bk.sh
build3_bk.sh 5 aaaaaaaaaaaa_W555aaaaaa C:\wang\PowerShell\test\buildtool\build3_bk.sh
build3_bk.xml 1 aaaaaaaaaaaa_W555aaaaaa C:\wang\PowerShell\test\buildtool\build3_bk.xml
build3_bk.xml 3 aaaaaaaaaaaa_W555aaaaaa C:\wang\PowerShell\test\buildtool\build3_bk.xml
build3_bk.xml 5 aaaaaaaaaaaa_W555aaaaaa C:\wang\PowerShell\test\buildtool\build3_bk.xml
输出文件(grepKekka2.csv):
Filename
--------
build1.sh
build1.sh
build1.sh
build1.xml
build1.xml
build1.xml
build2.sh
build2.sh
build2.sh
build2.xml
build2.xml
build2.xml
build3.sh
build3.sh
build3.sh
build3.xml
build3.xml
build3.xml
build3_bk.sh
build3_bk.sh
build3_bk.sh
build3_bk.xml
build3_bk.xml
build3_bk.xml
总结:
在linux服务器上取得Java编译环境各编译文件中相关文件信息时,由于文件数量过多,需要过滤出其中一部分带有关键信息的文件,故简单写成以下脚本文件,提取相关文件名。