Linuxでテキスト比較を実現するコツを教えます

Linuxでテキスト比較を実現するコツを教えます

序文

コードを書く過程で、必然的にコードに何らかの変更を加えることになります。しかし、変更を加えるときに、変更されたファイルとソース ファイルの違いがわからないことがよくあります。ここでは、テキスト比較を実行するためのテキスト比較ツールが必要です。

経験豊富なプログラマーは、Windows に BeyondCompare という非常に便利なテキスト比較ツールがあることを知っています。しかし、それは有料ソフトウェアであり、多くの一般企業はクラックされたソフトウェアの使用を許可していません。さらに、Windows でのみ利用可能であり、Linux バージョンはありません。

この記事で紹介するテキスト比較方法では、ソフトウェアは必要ありません。Linux コマンドのみが必要です。このコマンドを学習すれば、テキスト比較の方法がわからないという心配はなくなります。

この Linux コマンドは diff コマンドです。

diff は Unix システムにおいて非常に重要なツール プログラムです。これは 2 つのテキスト ファイル間の違いを比較するために使用され、コード バージョン管理の基礎の 1 つです。

まず、基本的なコマンド形式を見てみましょう。

diff [オプション]... ファイル

とても簡単です。しかし、選択肢が多すぎるため、自分の人生に疑問を抱くことになるでしょう。今はそれについて心配せずに、まずは最もよく使われるものを学びましょう。結局のところ、時間は賢く使うべきです。

-b - 行内の空白文字の違いを無視します (例: "Hello World!" は "Hello World!!" と同じとみなされます)

-B — 空白行を無視する

-i - 大文字と小文字の違いを無視

-r —— diff の後にディレクトリを指定すると、サブディレクトリ内のファイルを再帰的に比較します。

テキストを比較する方法を詳しく見てみましょう。

diff コマンドには 3 つの出力形式があります。

(1)通常形式(通常差分)

(2)文脈の違い

(3)統一差分

これら 3 つの出力形式を例を通して詳しく紹介します。たとえば、ファイル ac があるとします。その内容は次のようになります。

ここで、コピーを作成し、bc という名前を付け、3 行目の小文字の「hello」を大文字の「HELLO」に変更します。

(1)通常形式

通常の形式では、オプションを追加する必要はなく、次のように比較するだけです。

実行後の結果は次のとおりです。

上の図の意味を1行ずつ説明してみましょう。

行: 3c3

最初の 3 は、ファイル ac の 3 行目が変更されたことを示し、次の 3 は、ac が変更されて bc の 3 行目になったことを示します。真ん中の c が具体的な変更点です。 c は変更を表し、その他のタイプには削除を表す d や追加を表す a などがあります。

2行目: < hello world!

これは、ac ファイルの 3 行目のコンテンツを削除することを意味します。小なり記号は削除を示します。

3行目: ------

区切り線

4行目: > HELLO world!

これは、bc ファイルに 3 行目の内容を追加することを意味します。ここで、大なり記号は増加を示します。

(2)コンテキスト形式

通常の形式ではプロンプト情報が比較的少ないため、変更された領域をすぐに見つけることができず、変更の詳細を確認するにはファイルを開く必要があることがよくあります。そこで、より多くの情報を提供するために、コンテキスト形式が導入されました。使用コマンドは次のとおりです。

diff -c ac bc

このうち、c は context の略で、文脈を意味します。

上図の出力結果の具体的な意味は次のとおりです。

1 行目と 2 行目は、変更前と変更後のファイルと更新時刻を示します。次の *** 1,4 **** は、ac ファイルの 1 行目から 4 行目までの内容を示します。 hello world の前の感嘆符 (!) は、行が変更されたことを示します。行が削除された場合はマイナス記号 (-)、行が追加された場合はプラス記号 (+) になります。次の行も同様の意味を持ちます。

(3)マージ形式

この形式は通常の形式とコンテキスト形式を組み合わせたもので、git diff でも使用される形式です。この形式を使用するコマンドは次のとおりです。

diff -u ac bc 

上図の出力結果の詳細な意味は次のとおりです。

1 行目と 2 行目は、変更前と変更後のファイルと更新時刻を示します。末尾の -hello world! は元のファイル ac の内容を参照し、 +HELLO world! は bc の内容を参照します。

上記の 3 つの形式に加えて、もう 1 つのより直感的な方法であるサイドバイサイド形式があります。この表示形式のコマンド形式は次のとおりです。

この形式は並列形式で表示され、非常に直感的で明確です。 3行目には「|」記号があり、この行が変更されたことを示しています。また、先頭文字が「<」の場合は、次のファイルの内容が前のファイルより 1 行少ないことを意味し、「>」の場合は、次のファイルの内容が前のファイルより 1 行多いことを意味します。

要約する

上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。

以下もご興味があるかもしれません:
  • 1日1シェルコマンド Linuxテキストコンテンツ操作シリーズ - awkコマンド詳細説明
  • 一日一シェルコマンド Linuxテキストコンテンツ操作シリーズ - cutコマンド詳細説明
  • Linux 正規表現を使用してファイル内のテキストを柔軟に検索する
  • 1日1シェルコマンド Linuxテキスト操作シリーズ - touchコマンドの使い方
  • 1日1シェルコマンド Linuxテキスト操作シリーズ - head、tailコマンド詳細説明
  • 1日1シェルコマンド Linuxテキスト操作シリーズ - diffコマンドの詳しい説明
  • 1日1シェルコマンド Linuxテキストコンテンツ操作シリーズ - grepコマンド詳細説明
  • 1日1シェルコマンド Linuxテキスト操作シリーズ - wcコマンドの詳しい説明
  • LinuxテキストファイルとWINテキストファイルの改行形式変換コマンドの詳しい説明
  • 1日1回のシェルコマンドテキスト操作シリーズ - Linux dd 使用方法チュートリアル

<<:  Windows で MySQL 5.6 を 5.7 にアップグレードする方法

>>:  Vue2.x - アンチシェイクとスロットリングの使用例

推薦する

Vue はトークンを取得してトークン ログインのサンプル コードを実装します

ログイン認証にトークンを使用する考え方は次のとおりです。 1. 初めてログインする場合、フロントエン...

Vue での ElementUI の使用に関する詳細な説明

ログイン + セッションストレージエフェクト表示ログインに成功すると、ユーザー ID がフロントエン...

Vue マルチページ構成の詳細

目次1. 複数ページの違い2. SPAとMPA 3. Vue Cli スキャフォールディング構成1....

Vue 開発ツリー構造コンポーネント (コンポーネント再帰)

この記事では、Vue開発ツリー構造コンポーネントの具体的なコードを例として紹介します。具体的な内容は...

HTMLにおけるbackground-image属性の設定の詳細な説明

写真といえば、まず背景画像が思い浮かびます。私たちの装飾の多くは背景画像を使用して実現されているから...

シームレスなカルーセル効果を実現するネイティブ js

参考までに、ネイティブjsでカルーセル効果(シームレススクロール)を実現しています。具体的な内容は以...

Vueドロップダウンリストの2つの実装方法の比較

Vueドロップダウンリストの2つの実装最初の方法はv-forを使用する <el-select ...

Kali Linux Vmware 仮想マシンのインストール (図とテキスト)

準備: 1. VMwareワークステーションソフトウェアをインストールする2. Kali Linux...

Mysql テーブルコメントフィールド取得操作

余計なことは言わないで、コードだけ見てみましょう〜 -- テーブル内のフィールドコメントを表示および...

nginx のロードバランシングとリバースプロキシの説明

目次負荷分散負荷分散分類1. DNS 負荷分散2. IP負荷分散3. リンク層の負荷分散4. ハイブ...

Ubuntu 16.04 サーバーで MySQL を設定し、リモート接続を有効にする方法

背景最近、Node.js を勉強しているのですが、クラウド サーバーがあることを思い出しました。しか...

Springboot および Vue プロジェクトの Docker デプロイメントの実装手順

目次A. SpringbootプロジェクトのDockerデプロイメント1. Springbootプロ...

MySQL データベースのマスター スレーブ分離のサンプル コード

導入MySQL データベースの読み取りと書き込みの分離を設定すると、データベースに対する書き込み操作...

MySQL マルチテーブルクエリの詳細な説明

いつも、気づかないうちに時間というのは驚くほど早く過ぎていきます。小暑が過ぎ、中暑に突入しました。太...

Docker で MySQL クラスターを構築する方法の例

Docker の基本的な手順:アップデートパッケージ yum -y アップデートDocker仮想マシ...