Regex

正規表現でマッチしたグループを複数抽出する

Akira Ueno
概要 正規表現でマッチしたグループを複数抽出する場合はsedを使うと良い.グループが1つの場合はgrepでも-oPと\Kで抽出できるが,グループが複数あるとできない. コード i番目のグループ(()で囲まれた部分)を\iで置換する. sed -r 's/<正規表現>/\i/g 例 vncのポート番号とpidを抽出する例 sed $ ss -ltp | grep vnc LISTEN 0 5 0.0.0.0:5901 0.0.0.0:* users:(("Xtigervnc",pid=3193,fd=7)) LISTEN 0 5 0.0.0.0:5902 0.0.0.0:* users:(("Xtigervnc",pid=4404,fd=7)) LISTEN 0 5 0.0.0.0:5903 0.0.0.0:* users:(("Xtigervnc",pid=4453,fd=7)) LISTEN 0 5 [::]:5901 [::]:* users:(("Xtigervnc",pid=3193,fd=8)) LISTEN 0 5 [::]:5902 [::]:* users:(("Xtigervnc",pid=4404,fd=8)) LISTEN 0 5 [::]:5903 [::]:* users:(("Xtigervnc",pid=4453,fd=8)) $ ss -ltp | grep vnc | sed -r 's/^.*:([0-9]+).*pid=([0-9]+).*$/\1 \2/' | sort -u 5901 3193 5902 4404 5903 4453 うまくいく.