파일에서 변수 이름 바꾸기를 사용해 보았지만 tr
변수에 중복된 문자가 있는지 알 수 없는 일부 동작이 발견되었습니다.
예를 들어:
echo "aab" | tr 'aab' 'xyz'
xyz를 기대하면 "yyz"라는 결과가 나옵니다.
여기서 무슨 일이 일어나고 있는지 설명할 수 있는 사람이 있나요?
원하는 결과를 얻기 위해 다른 명령을 사용할 수 있다는 것을 알고 있지만 이 상황이 무엇인지 sed
이해하고 싶습니다 . tr
매뉴얼 페이지를 살펴봤지만 왜 이런 일이 발생하는지에 대한 다른 설명을 찾지 못했습니다. 감사해요
답변1
tr
문자열이 아닌 단일 문자를 처리합니다. 해당 매개변수는 일대일 매핑을 형성하는 문자 집합입니다.
tr aab xyz
' a
로 바꾸다 x
, a
~로 바꾸다 y
, b
~로 바꾸다 z
'라는 뜻입니다. 다음 두 그룹에서 한 수준 위를 살펴보는 것이 도움이 될 수 있습니다.
tr aab \
xyz
두 번째 그룹이 첫 번째 그룹보다 짧은 경우 마지막 문자를 반복하여 확장됩니다(기본적으로). 이러한 컬렉션은 순차적으로 적용되지 않고 순차적으로 읽혀지므로 a
위의 " →" 대체는 이전에 정의된 y
" a
→" 대체를 제거합니다.x