<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Regex on akky blog</title>
    <link>http://blog.akky.me/tags/regex/</link>
    <description>Recent content in Regex on akky blog</description>
    <generator>Hugo</generator>
    <language>jp-ja</language>
    <lastBuildDate>Fri, 23 Jul 2021 19:14:19 +0000</lastBuildDate>
    <atom:link href="http://blog.akky.me/tags/regex/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>正規表現でマッチしたグループを複数抽出する</title>
      <link>http://blog.akky.me/blog/20210723-shell-extract-match/</link>
      <pubDate>Fri, 23 Jul 2021 19:14:19 +0000</pubDate>
      <guid>http://blog.akky.me/blog/20210723-shell-extract-match/</guid>
      <description>&lt;h2 id=&#34;概要&#34;&gt;概要&lt;/h2&gt;&#xA;&lt;p&gt;正規表現でマッチしたグループを複数抽出する場合はsedを使うと良い．グループが1つの場合はgrepでも&lt;code&gt;-oP&lt;/code&gt;と&lt;code&gt;\K&lt;/code&gt;で抽出できるが，グループが複数あるとできない．&lt;/p&gt;&#xA;&lt;h2 id=&#34;コード&#34;&gt;コード&lt;/h2&gt;&#xA;&lt;p&gt;i番目のグループ(&lt;code&gt;()&lt;/code&gt;で囲まれた部分)を\iで置換する．&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sed -r &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;s/&amp;lt;正規表現&amp;gt;/&lt;span style=&#34;color:#ae81ff&#34;&gt;\i&lt;/span&gt;/g&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;例&#34;&gt;例&lt;/h2&gt;&#xA;&lt;p&gt;vncのポート番号とpidを抽出する例&lt;/p&gt;&#xA;&lt;h3 id=&#34;sed&#34;&gt;sed&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ss -ltp | grep vnc &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LISTEN    &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;         &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;                  0.0.0.0:5901             0.0.0.0:*        users:&lt;span style=&#34;color:#f92672&#34;&gt;((&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Xtigervnc&amp;#34;&lt;/span&gt;,pid&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;3193,fd&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;7&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;                                            &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LISTEN    &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;         &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;                  0.0.0.0:5902             0.0.0.0:*        users:&lt;span style=&#34;color:#f92672&#34;&gt;((&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Xtigervnc&amp;#34;&lt;/span&gt;,pid&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;4404,fd&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;7&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;                                            &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LISTEN    &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;         &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;                  0.0.0.0:5903             0.0.0.0:*        users:&lt;span style=&#34;color:#f92672&#34;&gt;((&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Xtigervnc&amp;#34;&lt;/span&gt;,pid&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;4453,fd&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;7&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;                                            &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LISTEN    &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;         &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;                     &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;::&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;:5901                &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;::&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;:*        users:&lt;span style=&#34;color:#f92672&#34;&gt;((&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Xtigervnc&amp;#34;&lt;/span&gt;,pid&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;3193,fd&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;8&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;                                            &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LISTEN    &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;         &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;                     &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;::&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;:5902                &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;::&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;:*        users:&lt;span style=&#34;color:#f92672&#34;&gt;((&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Xtigervnc&amp;#34;&lt;/span&gt;,pid&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;4404,fd&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;8&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;                                            &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LISTEN    &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;         &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;                     &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;::&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;:5903                &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;::&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;:*        users:&lt;span style=&#34;color:#f92672&#34;&gt;((&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Xtigervnc&amp;#34;&lt;/span&gt;,pid&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;4453,fd&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;8&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ss -ltp | grep vnc | sed -r &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s/^.*:([0-9]+).*pid=([0-9]+).*$/\1 \2/&amp;#39;&lt;/span&gt; | sort -u&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;5901&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3193&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;5902&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4404&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;5903&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4453&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;うまくいく．&lt;/p&gt;&#xA;&lt;h3 id=&#34;grep&#34;&gt;grep&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ss -ltp | grep vnc | grep -oP &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;:\K(\d+).*pid=\K(\d+)&amp;#39;&lt;/span&gt; | sort -u&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3193&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;4404&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;4453&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;最後にマッチした部分のみが抽出されてしまう．&lt;/p&gt;&#xA;&lt;h2 id=&#34;参考&#34;&gt;参考&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://unix.stackexchange.com/questions/13466/can-grep-output-only-specified-groupings-that-match&#34;&gt;https://unix.stackexchange.com/questions/13466/can-grep-output-only-specified-groupings-that-match&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://qiita.com/koara-local/items/2911bd81df2420a420ad&#34;&gt;https://qiita.com/koara-local/items/2911bd81df2420a420ad&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
  </channel>
</rss>
