tr(번역)과 sed 및 awk의 주요 차이점

tr(번역)과 sed 및 awk의 주요 차이점

AFAIC sedawkAFAIC는 둘 다 사용자가 매우 유사한 결과를 얻는 데 사용할 수 있는 범용 텍스트 처리 유틸리티이지만 구문은 약간 다릅니다.

두 가지 모두를 통해 사용자는 파일의 콘텐츠를 추가, 교체/번역 및 삭제할 수 있습니다.

이 두 가지 일반 텍스트 처리 유틸리티와 tr텍스트 처리 유틸리티의 주요 차이점은 무엇입니까?

내가 가정하는 기능은 tr두 가지 모두에 포함되어 있으므로 특정 컨텍스트로 범위가 좁혀졌습니다 sed.awk바꾸다하나의 문자열이 다른 문자열에 연결되지만 여기에서 내가 정확한지 또는 확실하지 않습니다.번역하다그것은 또 다른 것을 제공합니다.

답변1

예, tr은 및 에 비해 "간단한" 도구이며 쉽게 모방할 수 있습니다.awksedawksed최대기본 동작이지만 단일 항목이 있기 때문에 "내장"되어 있지도 않고 내장되어 있지도 않습니다 sed.awktr정확히해야 할 일을 모두 수행하십시오 tr.

tr문자열이 아닌 문자로 작업하고 한 문자 집합을 다른 문자 집합으로 변환합니다(예: tr 'A-Z' 'a-z'소문자 입력). 그 이름은 "번역하다" 또는 "음역하다"의 약어입니다.

여러 개의 동일한 연속 문자를 제거하는 기능과 같은 몇 가지 멋진 기능이 있지만 sed단일 표현식으로 구현하는 것은 다소 지루할 수 있습니다.

예를 들어,

tr -s '\n'

입력의 모든 연속 개행 문자를 단일 개행 문자로 압축합니다.

또한 유틸리티 tr는 행의 길이에 상관하지 않으며 sed작업을 수행하기 전에 메모리의 전체 행을 읽으려고 시도합니다(다시 말하지만 awk처리하기 전에 전체 레코드를 읽으려고 시도합니다). 이는 일부 퇴화된 경우에 해당될 수 있습니다. 문제가 됨 모든 데이터는 수 기가바이트 길이의 "전선"에 있습니다.

이 세 가지 도구를 대략적으로 설명하면 다음과 같습니다.

  • tr역할에 적용됩니다(변경 또는 삭제).
  • sed줄에 작용합니다(단어나 줄의 다른 부분을 수정하거나 줄을 삽입하거나 삭제합니다).
  • awk필드(기본적으로 한 줄에 공백으로 구분된 필드이지만 및 FS설정으로 변경할 수 있음 RS)가 있는 레코드에 적용됩니다.

답변2

sedy명령이 있습니다이는 다음과 유사합니다.tr:

와이/문자열 1/문자열 2/

모든 문자 항목 바꾸기문자열 1해당 문자와 ​​함께문자열 2.

$ echo 'a big cat' | sed -e 'y/abc/def/'
d eig fdt

y문자 범위 a-z또는 카테고리 는 지원되지 않습니다.[:alpha:] tr좋다-c, 또한 보완적인 모듈로 합도 아닙니다 -C. 삭제()는 연속된 줄을 단일 문자( )로 바꾸는 것과 마찬가지로 -d사용할 수 있습니다 . 전반적으로 기본적으로 라인 지향적입니다. 때로는 긴 스크립트를 작성하는 중에 유용할 수도 있지만 , 그게 전부라면 아마도 더 잘할 수 있을 것입니다.s//-ssedysedtr

awktr한 번에 한 문자씩 바꿀 수는 있지만 의 기본 기능과 동등한 기능 은 없습니다 . awk 언어는 매우 일반적이며, 충분한 동기가 있다면 원하는 변환을 달성할 수 있을 만큼 강력한 루프와 조건문을 작성할 수 있습니다. 당신이 좀 더 동기부여가 된다면, 당신 sed도 이것을 할 수 있을 것입니다. 이러한 도구는 어떤 의미에서도 실제로 동일하지 않습니다.

답변3

$ echo ooops not good | tr oops nice
iice nit giid
$  echo oops not good | sed 's/oops/nice/'
nice not good
tr은 단어 단위가 아닌 문자 단위로 번역하므로 정확한 순서를 가진 문자뿐만 아니라 해당 문자를 모두 변경합니다.

관련 정보