AFAIC sed
및 awk
AFAIC는 둘 다 사용자가 매우 유사한 결과를 얻는 데 사용할 수 있는 범용 텍스트 처리 유틸리티이지만 구문은 약간 다릅니다.
두 가지 모두를 통해 사용자는 파일의 콘텐츠를 추가, 교체/번역 및 삭제할 수 있습니다.
이 두 가지 일반 텍스트 처리 유틸리티와 tr
텍스트 처리 유틸리티의 주요 차이점은 무엇입니까?
내가 가정하는 기능은 tr
두 가지 모두에 포함되어 있으므로 특정 컨텍스트로 범위가 좁혀졌습니다 sed
.awk
바꾸다하나의 문자열이 다른 문자열에 연결되지만 여기에서 내가 정확한지 또는 확실하지 않습니다.번역하다그것은 또 다른 것을 제공합니다.
답변1
예, tr
은 및 에 비해 "간단한" 도구이며 쉽게 모방할 수 있습니다.awk
sed
awk
sed
최대기본 동작이지만 단일 항목이 있기 때문에 "내장"되어 있지도 않고 내장되어 있지도 않습니다 sed
.awk
tr
정확히해야 할 일을 모두 수행하십시오 tr
.
tr
문자열이 아닌 문자로 작업하고 한 문자 집합을 다른 문자 집합으로 변환합니다(예: tr 'A-Z' 'a-z'
소문자 입력). 그 이름은 "번역하다" 또는 "음역하다"의 약어입니다.
여러 개의 동일한 연속 문자를 제거하는 기능과 같은 몇 가지 멋진 기능이 있지만 sed
단일 표현식으로 구현하는 것은 다소 지루할 수 있습니다.
예를 들어,
tr -s '\n'
입력의 모든 연속 개행 문자를 단일 개행 문자로 압축합니다.
또한 유틸리티 tr
는 행의 길이에 상관하지 않으며 sed
작업을 수행하기 전에 메모리의 전체 행을 읽으려고 시도합니다(다시 말하지만 awk
처리하기 전에 전체 레코드를 읽으려고 시도합니다). 이는 일부 퇴화된 경우에 해당될 수 있습니다. 문제가 됨 모든 데이터는 수 기가바이트 길이의 "전선"에 있습니다.
이 세 가지 도구를 대략적으로 설명하면 다음과 같습니다.
tr
역할에 적용됩니다(변경 또는 삭제).sed
줄에 작용합니다(단어나 줄의 다른 부분을 수정하거나 줄을 삽입하거나 삭제합니다).awk
필드(기본적으로 한 줄에 공백으로 구분된 필드이지만 및FS
설정으로 변경할 수 있음RS
)가 있는 레코드에 적용됩니다.
답변2
sed
y
명령이 있습니다이는 다음과 유사합니다.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//
-s
sed
y
sed
tr
awk
tr
한 번에 한 문자씩 바꿀 수는 있지만 의 기본 기능과 동등한 기능 은 없습니다 . 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은 단어 단위가 아닌 문자 단위로 번역하므로 정확한 순서를 가진 문자뿐만 아니라 해당 문자를 모두 변경합니다.