예고편에 체크섬 값 추가

예고편에 체크섬 값 추가

파일의 트레일러 레코드에 SHA256 체크섬 해시를 추가하고 싶습니다.

file1.txt

H this is a test 
D 1
D 2
D 3
T checksum

64비트 영숫자 해시 값을 얻으려면 다음 명령을 사용하십시오.

sha256sum file1.txt >file2.txt

file2.txt

<64digituniquealphanumvalue> file1.txt

내 예상 출력 파일은 다음과 같습니다

file3.txt

H this is a test
D 1
D 2
D 3
T checksum <64digituniquealphanum>

하지만 다음 명령을 사용하여 다음 출력을 얻었습니다.

cat file1.txt file2.txt > file3.txt

file3.txt

H this is a test
D 1
D 2
D 3
T checksum
<64digituniquealphanum> file1.txt

file1새 줄이 있고 내 요구 사항은 예상 파일 형식으로 지정된 파일 이름이 없는 unix 파일의 마지막 줄인 T 레코드 유형에 64비트 고유 체크섬 해시 값을 추가하는 것입니다. 유닉스에서 구현하는 방법을 알려주십시오.

답변1

sed "s/^T checksum$/& $(sha256sum file1.txt | awk '{print $1}')/" file1.txt

sed명령은 "T 체크섬" file1.txt과 공백, sha256 다이제스트 만 포함하는 행과 일치합니다 file1.txt.

귀하의 것이 주어지면 다음과 file1.txt같이 출력됩니다.

H this is a test
D 1
D 2
D 3
T checksum 521967963f10f7f980c96ee7dfc832035d5fff252b134958add8a323023364d5

"T 체크섬" 줄 file1.txt아무것그렇지 않으면(예: 추가 공백 등) ^T checksum$패턴과 일치하지 않으며 아무것도 추가되지 않습니다.

답변2

sed " " 명령은 e모든 버전에서 사용할 수 없습니다. 여기서는 Linux에서 사용됩니다 sed (GNU sed) 4.7. 시도해 보세요.

sed -e '$ { h;s/.*/sha256sum file/; e ' -e '; s/ .*$//; H; x; s/\n/ /}' file
H this is a test 
D 1
D 2
D 3
T checksum 0ad6aaad4fea8e27b8c270191a43e1f8f12113e7b9dc34fecd7fcee053b42604

마지막 줄은 공간을 절약하기 위해 저장된 다음 sha256sum입력 파일에서 실행되고 공간을 절약하기 위해 추가된 다음 패턴 공간으로 교체되고 <NL>문자가 제거되고 인쇄됩니다.

파일에 추가한 후에는 향후 체크섬 유효성 검사가 실패합니다.

가능 file2하다면 시도해 보세요.

sed '1{s/ .*$//; h; d; }; ${G; s/\n/ /}' file2 file1

관련 정보