Provided by: manpages-ja_0.5.0.0.20110915-1_all bug

IF-THEN-ELSE

   C ã‚ソãƒãƒ¼ã‚スå½å½¢å¼å¼
       diff を用いて 2 ファイルの C ソースコードをマージすることもできる。  こ
       の出力形式には、両方のファイルの行がすべて含まれる。 両方のファイルに共
       通な行は一度しか登場しない。 異なる部分は C  プリプロセッサの指定を用い
       て分離される。  #ifdef  NAME  または  #ifndef  NAME, ,BR #else ", and "
       #endif である。 出力をコンパイルするとき、マクロ NAME  を定義したり、未
       定義のままにすることによって、 どちらのバージョンを使うかを選択できる。

       例えば、`wait  (&s)'  というインスタンスを `waitpid (-1, &s, 0)' に変更
       し、新旧のファイルを `--ifdef=HAVE_WAITPID'  オプションによってマージす
       ると、 影響を受けた部分のコードは以下のようになるだろう:

           do {
        #ifndef HAVE_WAITPID
                 if ((w = wait (&s)) < 0 && errno != EINTR)
        #else /* HAVE_WAITPID */
                 if ((w = waitpid (-1, &s, 0)) < 0  &&  errno != EINTR)
        #endif /* HAVE_WAITPID */
                 return w;
           } while (w != child);

   è¡è¡Œã‚ã‚°ãƒãƒ«ãƒãƒ¼ãƒãƒ—å½å½¢å¼å¼
       行グループ形式を用いると、   if-then-else  入力を受け入れる多くのアプリ
       ケーションに適した形式を指定できる。 例えばプログラミング言語や文書整形
       言語などが挙げられる。  行グループ形式は、 似ている行からなる隣接したグ
       ループの出力形式を指定する。

       例えば、以下のコマンドは TeX ファイル `old' と `new' を比較し、 old  の
       部分を      `\begin{em}'-`\end{em}'      で囲み、      new     の部分を
       `\begin{bf}'-`\end{bf}' で囲んでマージしたかたちで出力する。

        diff \
           --old-group-format='\begin{em}
        %<\end{em}
        '  \
           --new-group-format='\begin{bf}
        %>\end{bf}
        '  \
           old new

       以下のコマンドも上記の例と同じだが、やや記述が多い。   デフォルトの行グ
       ループ形式も指定しているからである。

        diff \
           --old-group-format='\begin{em}
        %<\end{em}
        ' \
           --new-group-format='\begin{bf}
        %>\end{bf}
        ' \
           --unchanged-group-format='%=' \
           --changed-group-format='\begin{em}
        %<\end{em}
        \begin{bf}
        %>\end{bf}
        '  \
           old new

       次にもう少し進んだ例を紹介する。これは差分リストを、
        "plain English" スタイルで行番号を書いたヘッダとともに出力する。

        diff \
           --unchanged-group-format='' \
           --old-group-format='-------- %dn line%(n=1?:s) deleted at %df:
        %<' \
           --new-group-format='-------- %dN line%(N=1?:s) added after %de:
        %>' \
           --changed-group-format='-------- %dn line%(n=1?:s) changed at %df:
        %<-------- to:
        %>' \
           old new

       行グループ形式を指定するには、 diff を以下のオプションのどれか 1 つを指
       定して実行する。 4 つまでの行グループ形式を指定でき、  各指定がそれぞれ
       行グループ 1 つに対応する。 FORMAT にはシェルのメタキャラクタが入ってい
       ることが多いので、 クォートするべきであろう。

       --old-group-format=FORMAT
              これらの行グループは 1  番目のファイルだけにある行からなる  hunk
              である。 デフォルトの old グループ形式は、changed グループ形式が
              指定されていれば  それと同じになる。されていなければ行グループは
              そのままのかたちで出力される。

       --new-group-format=FORMAT
              これらの行グループは  2  番目のファイルだけにある行からなる hunk
              である。 デフォルトの new グループ形式は、changed グループ形式が
              指定されていれば  それと同じになる。されていなければ行グループは
              そのままのかたちで出力される。

       --changed-group-format=FORMAT
              これらの行グループは両方のファイルの行からなる hunk である。  デ
              フォルトの  changed グループ形式は、 old グループと new グループ
              の形式を連結したものである。

       --unchanged-group-format=FORMAT
              これらの行グループは両方のファイルに共通の行からなる  hunk  であ
              る。  デフォルトの unchanged グループ形式は、 行グループをそのま
              まのかたちで出力するものである。

   ã‚ã‚°ãƒãƒ«ãƒãƒ¼ãƒãƒ—å¤å¤‰ææ›
       %<     1 番目のファイルからの行を意味する。行末尾の改行も含む。  各行は
              old 行形式によって整形される。

       %>     2  番目のファイルからの行を意味する。行末尾の改行も含む。 各行は
              new 行形式によって整形される。

       %=     両方のファイルで共通な行を意味する。行末尾の改行も含む。  各行は
              unchanged 行形式によって整形される。

       %%     `%' を表す。

       %c'C'' ここで  C は文字 1 文字で、C を表す。 C にバックスラッシュやアポ
              ストロフィは指定できない。 例えば `%c':'' はコロンを表し、これは
              if-then-else  形式の then 部分でもコロンとして解釈される。通常は
              コロンは then 部分の終わりとして扱われる。

       %c'\O''
              ここで 0 は 1 桁から 3 桁までの 8 進数字であり、8  進のコード  0
              に対応する文字を表す。例えば `%c'\0'' はナル文字になる。

       (A=B?T:E)
              A が B に等しい場合は T、 等しくない場合は E。 A と B はそれぞれ
              10 進数の定数か、上記のように解釈される文字 1 つである。  この形
              式指定は A の値が B と等しければ T と等価であり、 それ以外の場合
              は E と等価である。

              例えば `%(N=0?no:%dN) line%(N=1?:s)' は N (new  ファイルからのグ
              ループの行数) が 0 なら `no lines' となり、 N が 1 なら `1 line'
              となり、それ以外の場合は `%dN lines' となる。

       FN     ここで F は printf(3) の変換指定で、 N  は以下の文字のどれかであ
              る。 「F で整形された N の値」 を表す。

              e      old ファイルからのグループの直前の行の行番号。

              f      old  ファイルからのグループの最初の行番号。e  +  1 に等し
                     い。

              l      old ファイルからのグループの末尾の行番号。

              m      old ファイルからのグループの直後の行の行番号。l + 1  に等
                     しい。

              n      old ファイルからのグループの行数。l - f + 1 に等しい。

              E, F, L, M, N
                     上記と同様の new ファイルからのグループのもの。

       printf 変換指定には %d, %o, %x, %X (それぞれ 10 進, 8 進, 小文字 16 進,
       大文字 16 進) が使える。 `%' の後には以下のオプションを順に指定できる。
       `-'  (左詰めの指定)、整数 (フィールドの最低幅)、 ピリオドと数値 (数値は
       省略可; 桁数の最小値) である。 例えば `%5dN'  は  new  ファイルからのグ
       ループの行数を、  5 文字幅のフィールドに、 printf の "%5d" 書式を用いて
       表示する。

   è¡è¡Œå½å½¢å¼å¼
       行形式は、入力から取得された各行を if-then-else 形式の 行グループとして
       出力される際の制御を行う。

       例えば、以下のコマンドは、テキストの左に変更表示の  1 文字を表示して テ
       キストを出力する。出力の最初の桁は、削除行では `-'、 追加行では `|'  と
       なり、変更されなかった行ではスペースとなる。 この形式では、改行が必要な
       部分には改行を入れて出力する。

        diff \
           --old-line-format='-%l
        ' \
           --new-line-format='|%l
        ' \
           --unchanged-line-format=' %l
        ' \
          old new

       行形式を指定するには、以下のオプションのどれかを用いる。  FORMAT   には
       シェルのメタキャラクタが入っていることが多いので、 クォートするべきであ
       ろう。

       --old-line-format=FORMAT
              1 番目のファイルからの行だけを整形する。

       --new-line-format=FORMAT
              2 番目のファイルからの行だけを整形する。

       --unchanged-line-format=FORMAT
              両方のファイルに共通の行を整形する。

       --line-format=FORMAT
              全ての行を整形する。上記の全てのオプションを指定した場合に等し
              い。

       行形式では、普通の文字はそれ自身を表す。変換指定は `%' で始まり、以下の
       形式をとる:

       %l     行の内容を意味する。行末尾の改行はあっても含まない。  この形式で
              は、行に改行があるかどうかは無視される。

       %L     行の内容を意味する。行末尾の改行があればそれも含む。  行に改行が
              なければ、改行はないままになる。

       %%     `%' を表す。

       %c'C'' ここで C は文字 1 文字で、C を表す。 C  にバックスラッシュやアポ
              ストロフィは指定できない。 例えば `%c':'' はコロンを表し、これは
              if-then-else 形式の then  部分でもコロンとして解釈される。通常は
              コロンは then 部分の終わりとして扱われる。

       %c'\O''
              ここで  0  は 1 桁から 3 桁までの 8 進数字であり、8 進のコード 0
              に対応する文字を表す。例えば `%c'\0'' はナル文字になる。

       Fn     ここで F は printf(3) の変換指定で、 F  により整形された行番号を
              表す。 例えば `%.5dN' は行番号を `%.5d' という書式で整形して表示
              する。  printf  変換指定の詳細は、上記の行グループ形式のサブセク
              ションを見よ。

       デフォルトの行形式は  `%l' に改行文字を続けたものである。入力にタブ文字
       があり、 それが出力行の桁揃えに重要である場合には、`%l' や `%L'  の行指
       定を タブストップの直後に置くとよい (すなわち `%l' や `%L' の前にタブ文
       字を置けばよい)。 あるいは -t オプションを用いるのもよいだろう。

       行形式と行グループ形式を同時に用いると、様々な形式指定が可能となる。 例
       えば、以下のコマンドは diff の通常の形式と似た形式の指定である。 これを
       修正すれば、diff の出力を微調整することが可能になる。

        diff \
           --old-line-format='< %l
        ' \
           --new-line-format='> %l
        ' \
           --old-group-format='%df%(f=l?:,%dl)d%dE
        %<' \
           --new-group-format='%dea%dF%(F=L?:,%dL)
        %>' \
           --changed-group-format='%df%(f=l?:,%dl)c%dF%(F=L?:,%dL)
        %<---
        %>' \
           --unchanged-group-format='' \
           old new

ãƒãƒ‡ã‚ã‚£ãƒãƒ¬ã‚クãƒãƒˆãƒãƒªãã®æ¯æ¯”è¼è¼ƒ
       diff への 2 つの引数がディレクトリだった場合、 両方のディレクトリにそれ
       ぞれのファイルが、   ファイル名のアルファベット順に比較される。  通常は
       ファイルのペアに違いが全くなければ、何も出力しない。 しかし -s オプショ
       ンを用いると、同一のファイルも報告する。 両方のディレクトリに同名のサブ
       ディレクトリがあると、 通常  diff  は報告だけしてサブディレクトリ以下の
       ファイルは比較しない。  しかし -r オプションを用いると、 ディレクトリツ
       リーを辿れる限り、対応する全てのファイルを比較する。

       片方のディレクトリだけにあるファイルに対しては、  diff   は通常存在する
       ファイルの内容を表示せず、 ファイルが片方にあって他方にはないことだけを
       報告する。 diff の振舞いを変えて、 他方のディレクトリにもファイルが空の
       状態で存在するかのように 動作させることもできる。すなわち diff は実際に
       存在するファイルの内容をすべて出力する。  (この出力は、ファイルが第   1
       ディレクトリにあれば削除、  第 2 ディレクトリにあれば挿入となる。) この
       指定には -N オプションを使う。

       古いほうのディレクトリに大きなファイルがあって、   新しいほうにはない場
       合、  -N オプションの代わりに -P オプションを用いるとパッチの大きさを小
       さくできる。 -P オプションは -N オプションと似ているが、第 2 ディレクト
       リにあるファイルの内容だけを  出力に挿入し、第 1 ディレクトリだけにある
       ファイルは無視する   (すなわち、追加されたファイルだけを扱う)。    そし
       て、パッチを当てる前に消去されたファイルを削除するよう、 パッチの先頭に
       パッチを当てるユーザーへの指示を書く。

       ディレクトリの比較時に特定のファイルを無視させるには、 -x PATTERN  オプ
       ションを用いる。シェルとは異なり、ファイル名の先頭のピリオドは、 パター
       ン先頭のワイルドカードにマッチする。   シェルによって展開されないよう、
       PATTERN  はクォート記号で囲うべきである。  例えば `-x '*.[ao]'' は `.a'
       や `.o' で終わる名前のファイルをすべて無視する。 このオプションは、複数
       指定するとそれぞれが有効になる。  例えば `-x 'RCS' -x '*,v'' というオプ
       ションを指定すると、 ファイル名が `RCS' だったり  `*,v'  で終わるような
       ファイルとサブディレクトリをすべて無視する。

è¿è¿”ã‚ã‚Šå€å€¤
       diff は以下の値のどれかで終了する:

       0      全く変更がなかった。

       1      変更があった。

       2      何らかのエラーが起こった。

é–é–¢é€é€£é é …ç›ç›®
       cmp(1), comm(1), diff3(1), ed(1), patch(1), pr(1), sdiff(1)

æ³æ³¨æ„意
       プログラムのバグについては  bug-gnu-utils@gnu.org  へ報告してください。
       ページの更新は Ragnar Hojland Espinosa  <ragnar@ragnar-hojland.com>  が
       行っています。