2つの設定ファイルがあります。 1つはパッケージマネージャのソース設定ファイル、もう1つは私が直接変更したカスタム設定ファイルです。動作を説明するためにいくつかの説明を追加しました。
diff
設定ファイルをスキップするコメントを実行するには?コメント行は次のように定義されます。
- オプションの先行スペース(タブとスペース)
- ハッシュタグ(
#
) - その他の文字
最初の要件をスキップする(最も簡単な)正規表現はです。 GNU diff 3.0の()オプションを#.*
試しましたが、対応するREでは機能しませんでした。私も試してみましたが、運がありませんでした。文字通り、行( )を何も一致しないものとして置き、スラッシュの間にREを入れることも役に立ちません。--ignore-matching-lines=RE
-I RE
.*#.*
.*\#.*
Port 631
RE
提案通り「diff」ツールの正規表現スタイルが足りないと思いますか?、私は次のことを試しましたgrep -G
。
grep -G '#.*' file
これはコメントと一致するようですが、うまくいきませんdiff -I '#.*' file1 file2
。
それでは、このオプションをどのように使用する必要がありますか?diff
特定の行(私の場合はコメント)をスキップするにはどうすればよいですか?grep
ファイルを確認し、一時ファイルを比較することを提案しないでください。
ベストアンサー1
Gillesによると、-I
このオプションはセットからを除いて一致するものがない場合にのみ行を無視します-I
。テストするまでは完全に理解していませんでした。
テストを受ける
私のテストには3つのファイルが含まれています
。test1
:
text
文書test2
:
text
#comment
文書test3
:
changed text
#comment
注文する:
$ # comparing files with comment-only changes
$ diff -u -I '#.*' test{1,2}
$ # comparing files with both comment and regular changes
$ diff -u -I '#.*' test{2,3}
--- test2 2011-07-20 16:38:59.717701430 +0200
+++ test3 2011-07-20 16:39:10.187701435 +0200
@@ -1,2 +1,2 @@
-text
+changed text
#comment
別の方法
これまで、-I
このオプションを正しく使用する方法に対する答えがないので、bashシェルで動作する代替手段を提供します。
diff -u -B <(grep -vE '^\s*(#|$)' test1) <(grep -vE '^\s*(#|$)' test2)
diff -u
- 違いを統合する-B
- 空行を無視してください
<(command)
- bash 関数の呼び出しプロセスの交換コマンドのファイル記述子を開いて一時ファイルは必要ありません。grep
- パターンと一致しない行を印刷するコマンド-v
- 一致しない行の表示E
- 拡張正規表現を使用してください。'^\s*(#|$)'
- コメントと空白行を一致させる正規表現^
- 行の先頭に一致します。\s*
- スペース(タブとスペース)がある場合は一致します。(#|$)
ハッシュタグまたは行末と一致します。