
두 파일을 비교하고 있습니다. @
앞뒤 의 영숫자를 무시하려고 합니다 [
. 라인은 다음과 같습니다
model.Field@d6b0d6b[fieldName
답변1
나는 사용할 것이다프로세스 대체여기:
diff <(sed 's/@[^[]*/@/' old) <(sed 's/@[^[]*/@/' new)
답변2
나는 당신이 가정배쉬 사용.
그렇다면 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
다음 명령을 사용하여 두 파일을 만들 수 있습니다.
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$
보시다시피, @와 [ 사이의 행이 다르다는 사실은 무시되고 있으며, 파일 간에 다른 유일한 행은 다음과 같습니다.
모델.필드IAMDIFFERENT필드이름
질문 내용 중 제목을 세심히 살펴보지 못한 점 죄송합니다.
답변3
데이터 파일을 필터링한 다음 diff를 수행합니다.
sed 's/\@.*\[/@[/' file1 > file1.filt
sed 's/\@.*\[/@[/' file2 > file2.filt
diff file1.filt file2.filt
대안은 diff
-I 옵션을 사용하는 것입니다. 패턴과 일치하는 모든 행은 diff 비교에서 무시됩니다. 비교하지 않을 라인을 고유하게 선택하는 패턴을 선택하십시오. 예를 들어
diff -I 'dataexplorer.bigindex' file1 file2