PowerShell로 문자열을 분할하고 각 토큰으로 작업 수행
저는 파이프의 각 줄을 공간에 나누어 각각의 토큰을 고유의 줄에 인쇄하고 싶습니다.
다음을 사용하여 이 결과를 얻을 수 있음을 알고 있습니다.
(cat someFileInsteadOfAPipe).split(" ")
하지만 저는 좀 더 융통성을 갖고 싶습니다.저는 각 토큰을 가지고 무엇이든 할 수 있기를 원합니다. (저는 유닉스에서 AWK를 사용했는데, 같은 기능을 사용하려고 노력하고 있습니다.
현재 보유 중인 정보:
echo "Once upon a time there were three little pigs" | %{$data = $_.split(" "); Write-Output "$($data[0]) and whatever I want to output with it"}
분명히 첫번째 토큰만 인쇄하는거죠토큰을 차례대로 인쇄해서 각자에게 인쇄할 수 있는 방법이 있을까요?
그리고 또.%{$data = $_.split(" "); Write-Output "$($data[0])"}
블로그에서 얻은 부분인데 제가 무엇을 하고 있는지, 구문이 어떻게 작동하는지 정말 이해가 되지 않습니다.
구글에서 검색하고 싶은데 뭐라고 불러야 할지 모르겠어요.구글에 한 두 단어를 알려주거나, 무엇이 무엇인지 설명해주는 링크를 도와주세요.%
그 밖의$
기호뿐만 아니라 열림 및 닫힘 괄호의 중요성도 포함됩니다.
실제로 사용할 수 없다는 것을 알고 있습니다.(cat someFileInsteadOfAPipe).split(" ")
, 파일(또는 바람직한 수신 파이프)에 두 줄 이상이 포함되어 있기 때문입니다.
일부 답변에 대해서는 다음과 같습니다.
토큰화하기 전에 출력을 필터링하기 위해 를 사용하는 경우에는 출력의 출력을 염두에 두어야 합니다.Select-String
명령은 문자열의 집합이 아니라 다음의 집합입니다.MatchInfo
물건들.분할할 문자열에 액세스하려면Line
소유물MatchInfo
개체: 다음과 같습니다.
cat someFile | Select-String "keywordFoo" | %{$_.Line.Split(" ")}
"Once upon a time there were three little pigs".Split(" ") | ForEach {
"$_ is a token"
}
핵심은.$_
, 파이프라인의 현재 변수를 나타냅니다.
온라인에서 찾은 코드 정보:
%
는 에 대한 별칭입니다. 괄호 안에 포함된 모든 항목은 받는 개체마다 한 번씩 실행됩니다.이 경우에는 한 번만 실행됩니다. 문자열 하나를 전송하기 때문입니다.
$_.Split(" ")
현재 변수를 사용하여 공간에 분할하는 것입니다.현재 변수는 현재 로핑 중인 변수입니다.ForEach
.
Justus Grunow의 유용한 답변을 보완하기 위해:
Joey가 코멘트에서 언급했듯이, PowerShell은 강력한 정규 운영자를 보유하고 있습니다.
- 단항 형식()
-split '...'
에서는 의 기본 필드 분할과 같이 동작합니다.- 선행 및 후행 공백은 무시됩니다.
- 빈 공간(예: 인접한 여러 공간)의 실행은 단일 구분자로 처리됩니다.
- 단항 형식()
PowerShell v4+에서는 cmdlet에 대한 표현 기반(따라서 더 빠른 표현 기반)을 사용할 수 있게 되었습니다. 본질적인 방법(방법과 함께 보다 강력한 표현 기반의 대안).
다음은 다음과 같은 기능을 기반으로 한 솔루션입니다.
PS> (-split ' One for the money ').ForEach({ "token: [$_]" })
token: [One]
token: [for]
token: [the]
token: [money]
선행 공백과 후행 공백은 무시되었고, 다음 공백 사이의 다중 공백은 무시되었습니다.One
그리고.for
하나의 분리막으로 취급되었습니다
-split는 배열을 출력하며, 다음과 같은 변수에 저장할 수 있습니다.
$a = -split 'Once upon a time'
$a[0]
Once
또 다른 귀여운 점은 할당 문장의 양쪽에 배열을 가질 수 있다는 것입니다.
$a,$b,$c = -split 'Once upon a'
$c
a
이를 위한 또 다른 방법은 Justus Thane의 답변과 mklement0의 답변을 결합한 것입니다.하나의 라이너(linear) 예제를 볼 때는 이 방법을 사용하는 것이 합리적이지 않지만 파일이나 여러 파일 이름을 대량 편집하려고 할 때는 매우 편리합니다.
$test = ' One for the money '
$option = [System.StringSplitOptions]::RemoveEmptyEntries
$($test.split(' ',$option)).foreach{$_}
이것은 다음과 같이 나옵니다.
One
for
the
money
언급URL : https://stackoverflow.com/questions/11348506/split-string-with-powershell-and-do-something-with-each-token
'programing' 카테고리의 다른 글
캐리지 리턴 인 C? (0) | 2023.10.17 |
---|---|
memcpy 대 C의 할당 (0) | 2023.10.17 |
Wordpress JSON API를 사용하여 사용자 지정 필드(이미지) 가져오기 (0) | 2023.10.17 |
디브 내부의 스판 요소를 수평으로 가운데 두려면 어떻게 해야 합니까? (0) | 2023.10.17 |
WordPress jQuery UncaughtTypeError: 개체 [object Object]의 속성 '$'이(가) 함수가 아닙니다. (0) | 2023.10.17 |