@와 [ 사이의 문자열을 무시하고 두 파일을 비교합니다.

@와 [ 사이의 문자열을 무시하고 두 파일을 비교합니다.

두 파일을 비교하고 있습니다. 앞뒤의 @영숫자를 무시하려고합니다 [. 라인은 다음과 같습니다

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

관련 정보