8

grep -o (行全体ではなく行の一致した部分のみを表示する) を置き換える Powershell のコマンドはどれですか? Select-Object を使用しようとしましたが、常にフルラインが表示されます。例えば:

次の行

<a id="tm_param1_text1_item_1" class="tm_param1param2_param3 xxx_zzz qqq_rrrr_www_vv_no_empty" >eeee <span id="ttt_xxx_zzz">0</span></a>

次のコマンドを使用します。

cat filename  | grep -o '>[0-9]' | grep -o '[0-9]'

出力: 0

Select-Object を使用すると、常に実線が表示されます (

4

4 に答える 4

5

1 つの方法は次のとおりです。

$a = '<a id="tm_param1_text1_item_1" class="tm_param1param2_param3 xxx_zzz qqq_rrrr_www_vv_no_empty" >eeee <span id="ttt_xxx_zzz">0</span></a>'

$a -match '>([0-9])<' #returns true and populate the $matches automatic variable

$matches[1] #returns 0
于 2013-06-03T13:40:08.167 に答える
3

テキスト内の文字列を選択するには、select-stringではなくを使用しますselect-object。MatchInfo オブジェクトを返します。一致するプロパティにクエリを実行することで、一致にアクセスできます。

$a = '<a id="tm_param1_text1_item_1" class="tm_param1param2_param3 xxx_zzz qqq_rrrr_www_vv_no_empty" >eeee <span id="ttt_xxx_zzz">0</span></a>'
($a | select-string '>[0-9]').matches[0].value # returns >0
于 2013-06-03T13:55:15.627 に答える
2

InPowerShell v3:

sls .\filename -pattern '^[0-9]' -AllMatches  | % matches | % value

説明: sls は Select-String の別名です。ファイル名/パスとパターンをパラメータとして取ります。「マッチ」を生み出す

% 一致は、ファイルなどに関係なくすべての一致を選択します。 % 値は、各一致の値を選択します

于 2013-06-25T21:46:38.743 に答える
1

これまでに提案されたソリューションは、各行から最初の一致のみを生成します。(各行からすべてgrep -oの一致を生成する)の動作を完全にエミュレートするには、次のようなものが必要です。

Get-Content filename | Select-String '>([0-9])' -AllMatches |
  Select-Object -Expand Matches | % { $_.Groups[1].Value }

Select-String -AllMatches入力文字列からすべての一致を返します。

Select-Object -Expand Matchesを介してすべてのサブマッチを選択できるように、同じ行からマッチを「切断」します$_.Groups[1]。この展開がなければ、行の 2 番目の一致からのサブマッチは になります$_.Groups[3]

于 2013-06-03T17:37:03.077 に答える