
@
2つのファイルを比較しています。前後の英数字を無視しようとしています[
。行は次のようになります。
model.Field@d6b0d6b[fieldName
答え1
私は使うだろうプロセスの置換ここ:
diff <(sed 's/@[^[]*/@/' old) <(sed 's/@[^[]*/@/' new)
答え2
あなたはそうだと思いますBashを使用する。
その場合v="model.Field@d6b0d6b[fieldName"
、次の操作を実行できます。
# Extract the right side of "$v"
r="${v#*[}"
# Extract the left side of "$v"
l="${v%@*}"
# Combine
new_v="$l@[$r"; new_v1="$l$r"
使用できます"$new_v"または"$new_v1"@ と [ が必要かどうかによって異なります。
としてウィズマン氏コメントしましたが、私の回答は質問に答えていません。正解です。タイトルにあまり注意を払っていませんでした。それを修正して、上記のコードを次の関数でラップし、必要に応じて単一のファイルのデータを印刷しましょう。
pf()
{
while read -r line; do
# This is a bit fancy but does the same thing as the code above.
printf '%s\n' "${line%@*}${line#*[}"
done < "$1"
}
ここで、diff
次のコマンドを使用して 2 つのファイルを作成できます。
diff <(pf file1.txt) <(pf file2.txt)
がここにあります サンプル出力
rany$ cat file1.txt
model.Field1@__A__[fieldName
model.FieldIAMDIFFERENT@__B__[fieldName
model.Field1@__C__[fieldName
rany$ cat file2.txt
model.Field1@__C__[fieldName
model.Field1@__D__[fieldName
model.Field1@__E__[fieldName
rany$ diff <(pf file1.txt) <(pf file2.txt)
2c2
< model.FieldIAMDIFFERENTfieldName
---
> model.Field1fieldName
rany$
ご覧のとおり、@ と [ の間の行が異なるという事実は無視されており、ファイル間で異なる行は次の行のみです。
model.FieldIAMDIFFERENTフィールド名
質問の一部としてタイトルに注意を払わなかったことをお詫びします。
答え3
データファイルをフィルタリングし、次に diff を実行します。
sed 's/\@.*\[/@[/' file1 > file1.filt
sed 's/\@.*\[/@[/' file2 > file2.filt
diff file1.filt file2.filt
代替案としては、diff
オプション -I を使用することです。パターンに一致する行は、差分比較では無視されます。比較しない行を一意に選択するパターンを選択してください。例:
diff -I 'dataexplorer.bigindex' file1 file2