linuxコマンド-テキスト比較comm、diff、patch

2167 ワード

本文のオリジナルは公衆番号に先発します:プログラミングの3分
今日は3つのテキスト比較のコマンドを学びました.

comm


commコマンドは同じテキストを比較します
$ cat char
a
b
c
$ cat chardiff
a
d
c

例えば、私は2つのファイルcharchardiff上記のように、少し違うので、このコマンドで出力できます.
$ comm char chardiff
        a
b
c
    d
    c

以上のように、出力がめちゃくちゃに見えるが、彼は2つのファイルを列ごとにそれぞれ特有の出力を出力し、最後に共有したものを出力しただけだ.したがってパラメータ-1は1列目、つまり2列目と3列目を出力しないことを意味する.-21列目と3列目を出力-31、2列目を出力する.パラメータが廃れていて、苦労しているように見えます.
$ comm -1 char chardiff
    a
d
c
$ comm -12 char chardiff
a
commコマンドがバカで、既にソートされているデータに対してのみ、ソートされていなければabcacbと認識されるa同様、しばらくは比較的良い使用シーンとは思わなかった.

diff


使用gitのはすべて知っていますgit diffどれだけ使いやすいか、可視化ページほど直感的ではありませんが、迅速で便利なことを意味します.次の例ですがcharファイル内容はabcchardiff2内容はbcd
$ diff -c char chardiff2
*** char    2019-09-16 21:40:47.000000000 +0800
--- chardiff2    2019-09-17 00:38:52.000000000 +0800
***************
*** 1,3 ****
- a
  b
  c
--- 1,3 ----
  b
  c
+ d

直接プラスした-cパラメータはより直感的なため、興味があれば自分で消してみる-c効果を見てみましょう.*** 1,3 ****および--- 1,3 ----1から3行を表し、-削除行を表し、+増加行を表し、!変更行を表す.diff2つのファイルの違いを一時的に比較できるだけでなく、次のコマンドと組み合わせることが本当の用途です.

パッチ


通常、数百万行のプロジェクトを更新するとき、数行だけ変化があれば、すべてパッケージ化することは不可能です.それは大きすぎて、すべてコピーしても意味がありません.最大の問題は人力が比較しにくいことです.その前にパッチファイルを生成する必要があります
$ diff -Naur folder1 folder2 > diff_file
$ ls folder1
char chardiff
$ ls folder2
char chardiff ip

パッチファイルを入手diff_fileその後、foler1バージョンそっくりの場所に送信すれば更新に成功!
$ cd folder1
$ patch < diff_file
$ patch < diff_file
patching file chardiff
patching file ip

ロールバックする場合は-Rパラメータを追加
$ patch -R < diff_file
patching file chardiff
patching file ip

パラメータは以下の通り-p num:フォルダをいくつか無視-E:空のファイルが見つかったら削除-R:パッチ適用をキャンセル