PowerShell로 Grep하는 방법
15009 단어 powershellbashproductivity
노이즈를 제거하고 추가 분석을 가능하게 하는 중요한 작업입니다.
Bash에서 대부분은
grep
, egrep
또는 awk
에 끌립니다.고전적인 예는
$ history | grep ssh
ssh [email protected]
ssh [email protected]
ssh [email protected]
$ cat /var/log/app.log | grep error
2020-09-30 09:01:17 error: twitter api responded with 403
2020-09-30 09:16:05 error: secret plan to take over the world failed
그렙
$ grep api app.conf
api_key_twitter: '***'
api_key_digitalocean: '***'
가상 앱의 구성에
api
가 포함된 모든 설정이 나열됩니다. 1PowerShell에서는
Select-String
를 사용하고 -Pattern
매개변수에서 검색어를 정의합니다.PS> Select-String -Path "app.conf" -Pattern "api"
app.conf:2:api_key_twitter: '***'
app.conf:4:api_key_digitalocean: '***'
중요한!
명령에 이 추가
-Raw
를 비활성화하려는 경우 PowerShell에는 기본적으로 일치하는 파일과 행이 포함됩니다.그렙 -v
$ grep -v api app.conf
# Super awesome app config!
super_secret_setting: 'the cake is a lie!'
이것은 가상 앱의 구성에
api
를 포함하지 않는 모든 설정을 나열합니다. 1PowerShell은
-NotMatch
매개변수를 사용하여 이를 복제할 수 있습니다.PS> Select-String -Path "app.conf" -Pattern "api" -NotMatch
app.conf:1:# Super awesome app config!
app.conf:3:super_secret_setting: 'the cake is a lie!'
정규식 패턴
PowerShell은 기본적으로 정규식을 지원하므로 더 복잡한 필터를 작성하는 데 문제가 없습니다.
PS> Select-String -Path "app.conf" -Pattern "^\w*:"
app.conf:2:api_key_twitter: '***'
app.conf:3:super_secret_setting: 'the cake is a lie!'
app.conf:4:api_key_digitalocean: '***'
여러 파일
$ grep super_secret_setting *.py
debug.py:print(conf.super_secret_setting)
server.py:# TODO: Maybe we should not print super_secret_setting
server.py:#print(conf.super_secret_setting)
이것은 my
super_secret_setting
를 사용하여 모든 파이썬 코드를 나열합니다.PowerShell은 유사한 구문으로 이를 복제할 수 있습니다.
PS> Select-String -Path "*.py" -Pattern "super_secret_setting"
debug.py:7:print(conf.super_secret_setting)
server.py:14:# TODO: Maybe we should not print super_secret_setting
server.py:15:#print(conf.super_secret_setting)
재귀적으로 파일을 검색하는 것은 Bash에서도 정말 간단합니다.
$ grep -r super_secret_setting *.py
debug.py:print(conf.super_secret_setting)
server.py:# TODO: Maybe we should not print super_secret_setting
server.py:#print(conf.super_secret_setting)
utils.secrets.py:if conf.super_secret_setting:
불행히도 PowerShell에서는 여러 명령을 함께 연결해야 하는 것처럼 간단하지 않습니다.
Get-ChildItem -Recurse -Include "*.py" | Select-String -Pattern "super_secret_setting"
debug.py:7:print(conf.super_secret_setting)
server.py:14:# TODO: Maybe we should not print super_secret_setting
server.py:15:#print(conf.super_secret_setting)
utils/secrets.py:4:if conf.super_secret_setting:
팁 및 요령
이것은 전체 예를 들어볼 가치가 없는 몇 가지 사소한 기능을 설명하기 위해 소개하고 싶은 새로운 섹션입니다.
그러나 때때로 여전히 흥미롭고 유용합니다.
이것은
-List
스위치-AllMatches
그 -CaseSensitive
를 사용하여 대소문자를 구분하여 검색바로가기
매번 작성
Select-String
하는 것은 바람직하지 않습니다. 고맙게도 몇 가지 지름길을 택하고 Bash 근육 메모리를 가져올 수도 있습니다.Select-String
을 사용하여 줄입니다sls
.-Pattern
는 위치 인수 0-Path
는 위치 인수 1""
. 이 바로 가기를 사용하면 명령이 훨씬 더 짧아집니다.
Select-String -Path "app.conf" -Pattern "api"
sls api app.conf
Select-String -Path "app.conf" -Pattern "api" -NotMatch
sls api app.conf -NotMatch
Select-String -Path "app.conf" -Pattern "^\w*:"
sls "^\w*:" app.conf
Select-String -Path "*.py" -Pattern "super_secret_setting"
sls super_secret_setting *.py
Get-ChildItem -Recurse -Include "*.py" | Select-String -Pattern "super_secret_setting"
dir -Recurse -Include *.py | sls super_secret_setting
더 나아가
여기서는 PowerShell에서 grep을 대체하는 기본 예를 다룹니다.
PowerShell의 객체 지향 파이핑 시스템 덕분에 화면에 표시되는 정보가 작업의 전부가 아닙니다.
이전 예제에서 하나를 살펴보겠습니다.
super_secret_setting
의 모든 용도에 대한 보고서를 생성하는 가상 파이프라인에 연결합니다.Select-String -Path "*.py" -Pattern "super_secret_setting" | Select-Object Path,LineNumber | Export-Csv -Path api_conf.csv -NoTypeInformation
분명히 이것은 일치를 설명하는 풍부한 개체를 가질 수 있는 많은 가능성을 보여주는 예일 뿐입니다.
나중에 사용하기 위해 변수에 쓸 수도 있고, 반복하거나 실제 프로그래밍 언어에서 허용하는 다른 작업을 수행할 수도 있습니다.
빠른 참조를 위해 반환된 모든 MatchInfo 개체 내에서 액세스할 수 있는 모든 값입니다.
IgnoreCase : True
LineNumber : 2
Line : api_key_twitter: '***'
Filename : app.conf
Path : /Users/mkamner/projects/mkamner/blog/app.conf
Pattern : ^\w*:
Context :
Matches : {0}
Context
값은 결과 객체에서 일치하는 라인 전후에 X 라인을 얻을 수 있는 가능성을 제공하므로 사용하기에 흥미로울 수 있습니다.# 3 lines before and after
-Context 3
# 1 line before, 3 after
-Context 1,3
더 자세히 알아볼 수 있는 훌륭한 리소스는 Microsoft의 official documentation입니다.
Twitter에서 PowerShell 문제에 대해 언제든지 물어보세요!
app.conf ↩
Reference
이 문제에 관하여(PowerShell로 Grep하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/professorlogout/how-to-grep-with-powershell-3cll텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)