2021-01-25

Select-String:MatchInfo物件

Path屬性、Filename屬性、LineNumber屬性
Pattern屬性
IgnoreCase屬性
Line屬性、Matches屬性
Match物件 - Groups屬性
Match物件 - Captures屬性
顯示檔案內容
PS R:\> gc 1.txt
aaa
bbb
ccc
ddd
eee
PS R:\>
取得字串陣列
PS R:\> $arrFullName = (dir *.jpg).FullName
PS R:\> $arrFullName
R:\1.jpg
R:\2.jpg
R:\3.jpg
R:\4.jpg
R:\5.jpg
PS R:\>

Path屬性、Filename屬性、LineNumber屬性

資料來源是檔案
PS R:\> Select-String -Pattern 'b' -Path 1.txt

1.txt:2:bbb


PS R:\> $r = Select-String -Pattern 'b' -Path 1.txt
PS R:\>$r.Path
R:\1.txt
PS R:\> $r.Filename
1.txt
PS R:\>$r.LineNumber
2
PS R:\>
資料來源是變數
PS R:\> $arrFullName | Select-String -Pattern '2\.jpg'

R:\2.jpg


PS R:\> $r = $arrFullName | Select-String -Pattern '2\.jpg'
PS R:\> $r.Path
InputStream
PS R:\> $r.Filename
InputStream
PS R:\>$r.LineNumber
2
PS R:\>

Pattern屬性

二個Pattern
PS R:\> $arrFullName | Select-String -Pattern '2\.jpg','2'

R:\2.jpg


PS R:\>
用哪一個Pattern找到的?
PS R:\> $r = $arrFullName | Select-String -Pattern '2\.jpg','2'
PS R:\> $r.Pattern
2\.jpg
PS R:\>
交換Pattern順序
PS R:\> $r = $arrFullName | Select-String -Pattern '2','2\.jpg'
PS R:\> $r.Pattern
2
PS R:\>

IgnoreCase屬性

是否「不區分大小寫」 
PS R:\> $r = $arrFullName | Select-String -Pattern '2\.jpg'
PS R:\> $r.IgnoreCase
True
PS R:\> $r = $arrFullName | Select-String -Pattern '2\.jpg' -CaseSensitive
PS R:\> $r.IgnoreCase
False
PS R:\>
Regex裡面的設定,不影響IgnoreCase屬性
PS R:\> $r = $arrFullName | Select-String -Pattern '(?i)2\.jpg'
PS R:\> $r.IgnoreCase
True
PS R:\> $r = $arrFullName | Select-String -Pattern '(?-i)2\.jpg'
PS R:\> $r.IgnoreCase
True
PS R:\>

Line屬性、Matches屬性

Line屬性:整行內容 (含有關鍵字的行)
PS R:\> $s = 'a12345------a789'
PS R:\> $s | Select-String -Pattern 'a\d+'

a12345------a789


PS R:\> $r = $s | Select-String -Pattern 'a\d+'
PS R:\> $r.Count
1
PS R:\> $r.Line
a12345------a789
PS R:\>
Matches屬性:一個陣列 (內含一個or多個Match物件)
PS R:\> $r.Matches


Groups   : {0}
Success  : True
Name     : 0
Captures : {0}
Index    : 0
Length   : 6
Value    : a12345



PS R:\> $r.Matches.gettype().name
Match[]
PS R:\> $r.Matches.Count
1
PS R:\> $s = 'a12345------a789'
PS R:\> $r2 = $s | Select-String -Pattern 'a\d+' -AllMatches
PS R:\> $r2.Count
1
PS R:\> $r2.Matches


Groups   : {0}
Success  : True
Name     : 0
Captures : {0}
Index    : 0
Length   : 6
Value    : a12345

Groups   : {0}
Success  : True
Name     : 0
Captures : {0}
Index    : 12
Length   : 4
Value    : a789



PS R:\> $r2.Matches.Count
2
PS R:\>

Match物件 - Groups屬性

Group名稱:根據小括弧位置
PS R:\> $s = 'a12345------a789'
PS R:\> $s | Select-String -Pattern '(a)(\d+)'

a12345------a789


PS R:\> $r = $s | Select-String -Pattern '(a)(\d+)'
PS R:\> $r.Matches


Groups   : {0, 1, 2}
Success  : True
Name     : 0
Captures : {0}
Index    : 0
Length   : 6
Value    : a12345



PS R:\> $r.Matches.gettype().name
Match[]
PS R:\> $r.Matches.Count
1
PS R:\> $r.Matches.Value
a12345
PS R:\> $r.Matches[0].Value
a12345
PS R:\> $r.Matches[1].Value
PS R:\> $r.Matches[0].Groups[0].Value
a12345
PS R:\> $r.Matches[0].Groups[1].Value
a
PS R:\> $r.Matches[0].Groups[2].Value
12345
PS R:\>
自訂Group名稱
PS R:\> $s = 'a12345------a789'
PS R:\> $r = $s | Select-String -Pattern '(?<name1>a)(?<name2>\d+)'
PS R:\> $r.Matches


Groups   : {0, name1, name2}
Success  : True
Name     : 0
Captures : {0}
Index    : 0
Length   : 6
Value    : a12345



PS R:\> $r.Matches[0].Value
a12345
PS R:\> $r.Matches[0].Groups[0].Value
a12345
PS R:\> $r.Matches[0].Groups[1].Value
a
PS R:\> $r.Matches[0].Groups[2].Value
12345
PS R:\> $r.Matches[0].Groups[3].Value

PS R:\> $r.Matches[0].Groups['name1'].Value
a
PS R:\> $r.Matches[0].Groups['name2'].Value
12345
PS R:\> $r.Matches[0].Groups['aaaaa'].Value

PS R:\>
$r.Matches[0] 等於 $r.Matches[0].Groups[0]
PS R:\> $r.Matches[0]


Groups   : {0, name1, name2}
Success  : True
Name     : 0
Captures : {0}
Index    : 0
Length   : 6
Value    : a12345



PS R:\> $r.Matches[0].Groups[0]


Groups   : {0, name1, name2}
Success  : True
Name     : 0
Captures : {0}
Index    : 0
Length   : 6
Value    : a12345



PS R:\>
Groups屬性:列出所有Group
PS R:\> $r.Matches[0].Groups


Groups   : {0, name1, name2}
Success  : True
Name     : 0
Captures : {0}
Index    : 0
Length   : 6
Value    : a12345

Success  : True
Name     : name1
Captures : {name1}
Index    : 0
Length   : 1
Value    : a

Success  : True
Name     : name2
Captures : {name2}
Index    : 1
Length   : 5
Value    : 12345



PS R:\> $r.Matches[0].Groups[0].Groups
結果同上
PS R:\>

Match物件 - Captures屬性

小括弧後面:沒有量詞
PS R:\> $s = 'a5678---a9012'
PS R:\> $r = $s | Select-String -Pattern 'a(?<two>\d\d)'
PS R:\> $r.Matches[0].Value
a56
PS R:\> $r.Matches[0].Groups['two'].Value
56
PS R:\>
小括弧後面:有量詞
PS R:\> $r = $s | Select-String -Pattern 'a(?<two>\d\d)+'
PS R:\> $r.Matches[0].Value
a5678
PS R:\> $r.Matches[0].Groups['two'].Value
78←注意這裡
PS R:\> $r.Matches[0].Groups['two'].Captures

Index Length Value
----- ------ -----
    1      2 56
    3      2 78


PS R:\> $r.Matches[0].Groups['two'].Captures[0]

Index Length Value
----- ------ -----
    1      2 56


PS R:\> $r.Matches[0].Groups['two'].Captures[1]


Success  : True
Name     : two
Captures : {56, two}
Index    : 3
Length   : 2
Value    : 78


最後一個Capture等於Group本身
PS R:\> $r.Matches[0].Groups['two']


Success  : True
Name     : two
Captures : {56, two}
Index    : 3
Length   : 2
Value    : 78



PS R:\>

沒有留言:

張貼留言