2017-08-07 17 views
0

以下のコードとそのうまくいっさいの通り、正規表現の文字列を抽出しようとしました。下のスクリプトに従って、テキストの中で "45 \ 345 \ 54"という文字列を\ 345 \として抽出しています。Powershell Regex extract concat text

$input_path = "E:\DOC\all.txt" 
$output_file = "E:\DOC\all-pts.txt" 
$regex1 = ‘[ \b\t\n\r]+\\+[A-Z0-9_-]+\\$’ 
select-string -Path $input_path -Pattern $regex1 -AllMatches | % { 
$_.Matches } | % { $_.Value } > $output_file 

しかし、私は行うことができないのですたとえば以下のとおりにif文を使用して正規表現の結果、両方の1つの以上の正規表現文字列と連結を抽出したいです。私がここで何をしているのか分かりません。私はPowerShellを初めて使用しました。

INPUTファイル(all.txt)

temp1.txt:テキスト\ ABC \がここ
ある TEMP2:ファイル\ XYZ \ 123 \
temp2.​​txt \見つからない見つかりません
.TXT:NUM \ 999 \はい\ FIRST \

出力ファイル(すべて-pts.txt)

temp1.txt \ XYZ \
123 \ temp1.txt
\ temp2.​​txt \ ABC \
temp2.​​txt FIRST \

$input_path = "E:\DOC\all.txt" 
$output_file = "E:\DOC\all-pts.txt" 
(Get-Content "$input_path") | ForEach-Object 
{if($_ -like ‘[ \b\t\n\r]+\\+[A-Z0-9_-]+\\$’) 

     { 
      $regex1 = ‘[ \b\t\n\r]+\\+[A-Z0-9_-]+\\$’ 
      $regex2 = ‘[ A-Z0-9_-]+\.txt$’ 
      select-string -Path $input_path -Pattern $regex1 -AllMatches | % 
      { $_.Matches } | % { $_.Value } > $output_file 
      select-string -Path $input_path -Pattern $regex2 -AllMatches | % 
      { $_.Matches } | % { $_.Value } > $output_file 
      } 
     } 
+0

'ワイルドカードのためのものである-like'(例えば ''/'' *?)。大文字と小文字を区別する正規表現 – TheIncorrigible1

+0

のために '-match'または' -cmatch'を使いたい問題は、出力ファイルごとに同じ行に2つの正規表現の結果を連結できないことです。 – Arjun

+0

正規表現を組み合わせてみませんか? '' [\ b \ t \ n \ r] + \\ + [A-Z0-9 _-] + \\ $ | [A-Z0-9 _-] + \。txt $ '' –

答えて

関連する問題