2013/11/11

grep -o

少々前の話ではあるが、某ブログ にて grep -o について言及する記事が出ていた。
非常に便利そうな機能ではあるのだが、 POSIX (IEEE Std 1003.1, 2013 Edition) 準拠ではなく独自拡張の機能の様なので POSIX の範囲での実現方法を考えてみた。

例えば

$ grep -o 'href="[^"]*"'
    
$ sed -n 's/.*\(href="[^"]*"\).*/\1/p'
    
で代用可能なので、
$ cat << EOF | sed -n 's/.*\(href="[^"]*"\).*/\1/p'
<!DOCTYPE html>
<html>
    <body>
        <a href="http://aho.aho" target="_blank">あほ</a>
        <img src="aho.jpg" alt="aho">エロい画像</a>
    </body>
</html>
EOF
href="http://aho.aho"
    
という結果が得られる。
素晴らしい! POSIX 準拠なコマンドで POSIX 非準拠をぶち破ったぞ!
論破! 論破! 論破!

ただし grep (1) の -E オプションは POSIX に準拠しているが、 sed (1) の -E オプションは POSIX に定義されていないので、
$ grep -o -E '(src|href)="[^"]*"'
    
には対応できない。
FreeBSD の sed (1) など -E オプションが利用できれば
$ sed -n -E 's/.*((src|href)="[^"]*").*/\1/p'
    
とする事で対応できるのだが、
$ cat << EOF | sed -n -E 's/.*((src|href)="[^"]*").*/\1/p'
<!DOCTYPE html>
<html>
    <body>
        <a href="http://aho.aho" target="_blank">あほ</a>
        <img src="aho.jpg" alt="aho">エロい画像</a>
    </body>
</html>
EOF
href="http://aho.aho"
src="aho.jpg"
    
POSIX の範疇を逸脱した時点で grep -o を使えば良いとなってしまう。

残念っ!

2013/11/23 追記

頑張る必要は全くありません(笑)
普段は GNU の便利なオプションも使っていますし、 POSIX 準拠していないコマンドやオプションも使ってます。
純粋に楽しいからやってるだけです。

grep -o

小ネタです。コマンドのオプションで感動するのは、何年シェルを叩いていても起こることで、本日はGNU grepに-oというのがあると知りました。 manを読むと次のようにあります。 -o, --only-matching Prints only the matching part of the lines. 試してみましょう。 uedamac:~ ueda$ cat hoge.html &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;body&gt; &lt;a href&#8230;

Posted by 上田さんのブログ at 2013/11/19 (Tue) 18:36:40

grep -o

小ネタです。コマンドのオプションで感動するのは、何年シェルを叩いていても起こることで、本日はGNU grepに-oというのがあると知りました。 manを読むと次のようにあります。 -o, --only-matching Prints only the matching part of the lines. 試してみましょう。 uedamac:~ ueda$ cat hoge.html &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;body&gt; &lt;a href&#8230;

Posted by 上田さんのブログ at 2013/11/19 (Tue) 18:36:49

grep -o

小ネタです。コマンドのオプションで感動するのは、何年シェルを叩いていても起こることで、本日はGNU grepに-oというのがあると知りました。 manを読むと次のようにあります。 -o, --only-matching Prints only the matching part of the lines. 試してみましょう。 uedamac:~ ueda$ cat hoge.html &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;body&gt; &lt;a href&#8230;

Posted by 上田さんのブログ at 2013/11/19 (Tue) 18:37:35

grep -o

小ネタです。コマンドのオプションで感動するのは、何年シェルを叩いていても起こることで、本日はGNU grepに-oというのがあると知りました。 manを読むと次のようにあります。 -o, --only-matching Prints only the matching part of the lines. 試してみましょう。 uedamac:~ ueda$ cat hoge.html &lt;!DOCTYPE html&gt; &lt;html&gt; &lt&#8230;

Posted by 上田さんのブログ at 2013/11/19 (Tue) 18:40:22

grep -o

小ネタです。コマンドのオプションで感動するのは、何年シェルを叩いていても起こることで、本日はGNU grepに-oというのがあると知りました。 manを読むと次のようにあります。 -o, --only-matching Prints only the matching part of the lines. 試してみましょう。 uedamac:~ ueda$ cat hoge.html &lt;!DOCTYPE html&gt; &lt;html&gt; &lt&#8230;

Posted by 上田さんのブログ at 2013/11/19 (Tue) 18:40:31
トラックバック
https://blog.bsdhack.org/index.cgi/Computer/20131111.trackback
コメント














メッセージ: Ready to post a comment.