이 tr 명령의 역할은 정확히 무엇입니까?

이 tr 명령의 역할은 정확히 무엇입니까?

Windows 시스템에서 WSL을 사용하여 실행되는 일부 명령을 다시 작성 중이며 Python에서도 동일한 작업을 수행해야 합니다. 이 명령이 정확히 무엇을 수행하려고 하는지 파악하는 데 어려움을 겪고 있습니다.

다음은 명령과 내가 지금까지 알고 있는 내용입니다.

  1. wsl tr -dc \'\\007-\\011\\012-\\015\\040-\\376\' < some.txt > someother.txt- 이 명령은 some.txt에서 일부 정크 문자를 제거하기 위해 8진수 이스케이프 시퀀스 범위를 사용하는 것 같습니다. 하지만 이번에도 정확히 어떤 문자가 제거되었는지, 텍스트 파일에서 어떤 문자가 제거되었는지 파악하는 데 어려움을 겪고 있습니다.

  2. wsl tr -d \'\\333\' < someother.txt > some.txt- 이것은 나에게 완전한 미스터리입니다. 나는 8진수 333을 찾아보았는데 거기에는 연관된 ASCII 코드도 있었습니다.

  3. wsl tr \"|\" \" \"- 이 명령은 특정 파이프 문자를 공백으로 바꾸는 명령이라고 하는데 어떤 문자인지 파악하는 데 어려움이 있습니다.

도움을 주시면 감사하겠습니다! 감사합니다!

답변1

분명히 이것은 cmd, powershell 또는 sh 구문의 명령이 아닙니다. 추가 백슬래시 이스케이프 계층이 있습니다. 백슬래시 이스케이프를 완료하면 다음 sh 명령이 남습니다.

wsl tr -dc '\007-\011\012-\015\040-\376' < some.txt > someother.txt
wsl tr -d '\333' < someother.txt > some.txt
wsl tr "|" " "

처음 두 명령은 파일을 읽고 씁니다. 마지막 것은 표준 입력에서 읽고 표준 출력에 쓰는 것입니다.

옵션이 아닌 인수에서 tr백슬래시 뒤에 3개의 8진수 숫자가 오면 해당 값이 숫자로 제공되는 바이트를 나타냅니다. 두 바이트 사이의 ASCII 하이픈( -)은 과(과) 사이의 값을 갖는 모든 바이트를 나타냅니다.

첫 번째 명령은 다음 두 인수를 tr: -dc및 에 전달합니다 \007-\011\012-\015\040-\376. -dc다음 매개변수에 값이 지정된 바이트를 제외한 모든 바이트를 삭제한다는 의미입니다. 즉, 지정된 바이트는 유지되고 다른 모든 바이트는 삭제됩니다. 예약된 바이트는 다음과 같습니다.

따라서 이것은 제어 문자(모든 공백 및 일부 비공백 문자 제외)를 제거하고 일부 버그가 있는 소프트웨어가 파일 끝으로 해석하는 바이트 255를 제거하는 다소 이상한 방법입니다.

두 번째 명령은 다음 두 인수를 tr: -d및 에 전달합니다 \333. ( -d) 바이트 (십진수 219, 16진수 0xdb)를 제거합니다 \333. 이 특정 바이트 값을 제거하려는 이유가 무엇인지 모르겠습니다.

세 번째 명령은 다음 매개변수를 tr: |(공백)에 전달합니다. 이는 모든 문자 |(ASCII 수직선, 파이프라고도 함)를 일반 ASCII 공백으로 대체합니다. 이는 |"일부" 항목뿐만 아니라 모든 항목을 대체합니다.

Python에서는 다음을 사용할 수 있습니다.

  1. import re그런 다음 re.sub(rb'\000-\006\016-\037\377', rb'', x), 또는bytes.maketrans이어서x.번역
  2. x.replace(b'\333'. b'')
  3. x.replace(b'|'. b' ')

1 일부 구현은 tr멀티바이트 문자를 지원하지만 tr내가 아는 한 WSL에서 제공하는 GNU는 지원하지 않습니다.

관련 정보