GNU/Linux >> Linux の 問題 >  >> Linux

diffコマンドを使用してLinuxでファイルを行ごとに比較する方法

Linuxユーザーであり、さまざまなLinuxディストリビューションでの作業が仕事に含まれている場合、GUIのない​​Linuxシステムでコマンドを入力していることに気付くことがあります。これは、通常の作業で通常使用するお気に入りのGUIアプリケーション(たとえば、ファイル編集用のGeditなど)にアクセスできなくなることを意味します。

システム管理者であるか開発者であるかに関係なく、ファイル比較はほとんどすべての人の作業に共通するタスクです。 CLIのみのLinuxシステムで作業しているときに2つのファイルを比較する必要がある場合はどうなりますか?お気に入りのGUIベースの比較ツールは、明らかに自由に使用できません。言うまでもなく、作業を完了するには、コマンドラインユーティリティを使用する必要があります。

Linuxでは、diffコマンドを使用して2つのファイルを比較できますが、このユーティリティにはわずかな学習曲線が必要です。 diffがどのように機能するかわからず、開始するための簡単なチュートリアルを探している場合は、この記事のように、このコマンドの基本といくつかのわかりやすい例について説明します。

先に進む前に、このチュートリアルのすべての例は、Bashバージョン4.3.11(1)とdiffバージョン3.3を使用してUbuntu14.04でテストされていることに注意してください。

LinuxDiffコマンド

例に直接ジャンプするのではなく、最初にコマンドについて少し知っておくとよいでしょう。 diffコマンドのマニュアルページには、ツールがファイルを1行ずつ比較していることがわかります。その構文は次のとおりです。

diff [OPTION]... FILES

[OPTION] ツールが提供するさまざまなコマンドラインオプションファイルを表します 通常、いくつかのファイル名です。 diffのマニュアルページにはコマンドに関する有用な情報が含まれていますが、diffの完全なドキュメントはTexinfoマニュアルとして維持されています。 情報の場合 およびdiff プログラムがサイトに正しくインストールされている、コマンド

info diff

完全なマニュアルにアクセスできるはずです。

差分の使用法/例

次に、diffの使用方法について説明します。このために、基本的な例から始めましょう。比較したい2つのファイルを次に示します。

file1:

test
test2
test3

file2:

test
test23
test3

diffコマンドを使用してこれら2つのファイルを比較する方法は次のとおりです。

diff file1 file2

上記のコマンドが生成する出力は次のとおりです。

2c2
< test2
---
> test23

出力は不可解に見えますよね?少し後で説明します。まず、diffが一般的に生成する出力の基本構造を理解しましょう。

最初に覚えておくべきことは、出力はfile1(通常は元のファイル)をfile2(新しいファイルまたは変更されたファイル)に変換するために必要な変更を表すということです。出力は通常、数字(または範囲)で始まり、アルファベット(a、d、またはc)と別の数字(または範囲)が続く行で構成されます。例: 2c2 (上記の出力から)

最初の数字はfile1(元のファイル)からの行(または行の範囲)を表し、最後の数字はfile2(新しいファイル)からの行(または行の範囲)を表します。中間のアルファベットについては、 a 追加を表します 、 d 削除済み用です およびc 変更を表します 。

したがって、2c2は、元のファイルの2行目が変更されており、ファイルを同じにするために新しいファイルの2行目に置き換える必要があることを意味します。 2つのファイル(file1とfile2)を手動で比較すると、まさにその通りであることがわかります。

前述の例の2c2に続く3行については、「<」で始まる行はfile1の2行目であり、「>」で始まる行はファイル2の問題の行にすぎません。それらの間にある3つのハイフン(---)は、分離のみを目的としています。

今、最初の例の出力を再検討する必要がありますか?上記の説明がそれを自明にするべきだったので、おそらくそうではありません。それでは、別の例を見てみましょう。

だから、ここにfile1:

Hi all,
This is a diff command tutorial
from HowtoForge.
Hope you'll benefit from it.
Thanks.

file2は次のとおりです:

Hi all,
Welcome to HowtoForge.
In this tutorial, we'll discuss the diff tool.
Hope you'll find it beneficial.
Thanks.

コマンドは次のとおりです(これは同じままです):

diff file1 file2

そして、これが出力です:

2,4c2,4
< This is a diff command tutorial
< from HowtoForge.
< Hope you'll benefit from it.
---
> Welcome to HowtoForge.
> In this tutorial, we'll discuss the diff tool.
> Hope you'll find it beneficial.

したがって、この場合、メイン出力- 2,4c2,4 -アルファベットの前後の複数の数字で構成されます。これらは基本的に範囲です。2,4は行番号2、3、および4を表します。したがって、出力は、元のファイル(file1)の行番号2から4が変更され、からの行番号2から4に置き換える必要があることを意味します。ファイルを同じにするためにfile2。

次に、ファイルの内容を少し変更してみましょう。 file1は同じままですが、file2は次のようになります。

Welcome to HowtoForge.
In this tutorial, we'll discuss the diff tool.
Hope you'll find it beneficial.
Thanks.

This is a diff command tutorial
from HowtoForge.
Hope you'll benefit from it.
Thanks.

ここで、diffコマンドを実行すると、次の出力が生成されます。

0a1,5
> Welcome to HowtoForge.
> In this tutorial, we'll discuss the diff tool.
> Hope you'll find it beneficial.
> Thanks.
>

したがって、ツールは、file2の2番目の段落がすべてのfile1に含まれているものに他ならないことをすぐに認識したことがわかります。したがって、出力には、2つのファイルを同じにするためにfile2の1行目から5行目をfile1の先頭に追加する必要があることが示されています。

そして、file2から最後の行( "Thanks。")を削除すると、次のようになります。

0a1,5
> Welcome to HowtoForge.
> In this tutorial, we'll discuss the diff tool.
> Hope you'll find it beneficial.
> Thanks.
>
4d8
< Thanks.

出力に4d8、も含まれていることがわかります。 つまり、両方のファイルを8行目から同期させるには、file1の4行目を削除する必要があります。もちろん、これは、最初に述べた0a1,5の変更に対処した後です。

結論

同意しましたが、diffコマンドの出力を理解するのは簡単ではありませんが、学習曲線はそれほど急ではありません。ツールを使って数時間過ごすと、きっと快適になります。チュートリアルに関しては、ここで表面をかじったところです。コマンドのマニュアルページを見ると、このチュートリアルシリーズの次のパートで行うdiffについて学ぶことがもっとたくさんあることがわかります。


Linux
  1. diffコマンドを使用してLinuxでファイルを行ごとに比較する方法-パートII

  2. Linux で SCP コマンドを使用してファイルを安全に転送する方法

  3. Linux での diff コマンドの例

  1. Linuxでファイルの名前を変更する方法

  2. コマンドラインを使用してLinuxを再起動する方法

  3. Linux の「find」コマンドを使用して隠しファイルを表示する方法

  1. コマンドを使用してLinuxでプロセスを強制終了する方法は?

  2. Sort コマンドを使用して Linux でファイルをソートする方法

  3. 「dd」コマンドを使用して Linux でスパース ファイルを作成する方法