特定の文字列がある行から、別の特定の文字列がある行までを抽出したいということがよくあります。 これgrep等を使うと苦労する話なんですが、flip-flop演算子を使ったPerlのone-linerで可能です。
例えば昨日の記事ではgit help commit
の中から--no-edit/
オプションの説明を抽出しました。
これは--no-edit
という文字列が出てくるところから空行までを抽出すれば良い。これは以下のようにすれば可能です。
$ git help commit | perl -nle 'print if /--no-edit/ ... /^\s*$/'
解説自体に空行が混じるケースでは以下のようにすれば良いでしょう。
この例では、--cleanup
という文字列が出現してから、次のオプション(-文字列
形式)が出るまでを抽出しています。
$ git help commit | perl -nle 'print if /^\s+--cleanup/ ... /\s*-\w+/' --cleanup=<mode> This option determines how the supplied commit message should be cleaned up before committing. The <mode> can be strip, whitespace, verbatim, scissors or default. strip Strip leading and trailing empty lines, trailing whitespace, commentary and collapse consecutive empty lines. whitespace Same as strip except #commentary is not removed. verbatim Do not change the message at all. scissors Same as whitespace except that everything from (and including) the line found below is truncated, if the message is to be edited. "#" can be customized with core.commentChar. # ------------------------ >8 ------------------------ default Same as strip if the message is to be edited. Otherwise whitespace. The default can be changed by the commit.cleanup configuration variable (see git-config(1)).