行はほとんど同じですが、順序が間違っている違いはありますか?

行はほとんど同じですが、順序が間違っている違いはありますか?

私は2つのmod_rewriteルールセットを区別したいと思います。このラインセットは約90%同じですが、順序が異なるので、違いを見ると基本的には全く異なることがわかります。

行番号に関係なく、2つのファイル間で実際にどの行が異なるかをどのように確認できますか?

答え1

sortファイルを同じ順序で配置してdiff比較し、違いを識別するために使用できます。プロセスの交換がある場合は、それを使用して新しいソートファイルを作成する必要はありません。

diff <(sort file1) <(sort file2)

答え2

私は一つ作ったスクリプトこれを行うには、行の順序をそのままにしてください。重要な行の注釈付きバージョンは次のとおりです。

# Strip all context lines
diff_lines="$(grep '^[><+-] ' | sed 's/^+/>/;s/^-/</')" || exit 0

# For each line, count the number of lines with the same content in the
# "left" and "right" diffs. If the numbers are not the same, then the line
# was either not moved or it's not obvious where it was moved, so the line
# is printed.
while IFS= read -r line
do
    contents="${line:2}"
    count_removes="$(grep -cFxe "< $contents" <<< "$diff_lines" || true)"
    count_adds="$(grep -cFxe "> $contents" <<< "$diff_lines" || true)"
    if [[ "$count_removes" -eq "$count_adds" ]]
    then
        # Line has been moved; skip it.
        continue
    fi
    
    echo "$line"
done <<< "$diff_lines"

if [ "${line+defined}" = defined ]
then
    printf "$line"
fi

答え3

私のオープンソースのLinuxツール「dif」は、違いを無視しながらファイルを比較します。

ソート、タイムスタンプ、空白またはコメントを無視、検索/置換を実行する、正規表現に一致する行を無視するなどのさまざまなオプションがあります。

入力ファイルを前処理した後、これらの中間ファイルに対してLinuxツールmeld、gvimdiff、tkdiff、diff、またはkompareを実行します。

インストールは必要ありません。以下から「dif」実行ファイルをダウンロードして実行します。https://github.com/koknat/dif

ユースケースに応じて、「ソート」オプションを試してください。

dif file1 file2 -sort

関連情報