두 파일을 비교하고 있습니다. 앞뒤의 @
영숫자를 무시하려고합니다 [
. 라인은 다음과 같습니다
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
또 다른 방법은 -I 옵션을 사용하는 것입니다 diff
. diff 비교에서 패턴과 일치하는 모든 행은 무시됩니다. 비교되지 않는 행만 선택하는 모드를 선택하십시오. 예를 들어
diff -I 'dataexplorer.bigindex' file1 file2