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:\>
沒有留言:
張貼留言