tr -sc 'A-Za-z' '[\12*]' 에 빈 줄이 포함된 이유는 무엇입니까?

tr -sc 'A-Za-z' '[\12*]' 에 빈 줄이 포함된 이유는 무엇입니까?

합격하려고 해요시인의 유닉스, 그리고 모든 단어/토큰을 포함하는 파일을 생성해 보십시오.성경. 그러나 제안된 대로 tr을 사용하면 여기에는 빈 문자열이 포함됩니다. 아래 예를 참조하세요.

> tr -sc 'A-Za-z' '[\12*]' < bible.txt > bible.words
> sed 5q bible.words

The
Project
Gutenberg
EBook

나는 운 없이 tr에 대한 매뉴얼 페이지를 읽었습니다. 왜 포함되었는지 이해하는 데 도움을 주시면 대단히 감사하겠습니다.

편집하다:

첫 번째 예:

bible.txt의 줄:

1:1 예수 그리스도의 종 바울은 사도로 부르심을 받았습니다.

예상치 못한 결과를 재현하는 명령:

> echo '1:1 Paul, a servant of Jesus Christ, called to be an apostle,' | tr -sc 'A-Za-z' '[\12*]'

Paul
a
servant
of
Jesus
Christ
called
to
be
an
apostle

예상 출력:

Paul
a
servant
of
Jesus
Christ
called
to
be
an
apostle

두 번째 예:

bible.txt의 줄:

프로젝트 구텐베르그 킹제임스 성경 전자책

예상치 못한 결과가 동일한 명령:

echo 'The Project Gutenberg EBook of The King James Bible  ' | tr -sc 'A-Za-z' '[\12*]'

The
Project
Gutenberg
EBook
of
The
King
James
Bible

예상 출력:

The
Project
Gutenberg
EBook
of
The
King
James
Bible

내가 이해할 수 없는 빈 줄이 앞에 붙어 있다는 점에 유의하세요.

답변1

tr무슨 일이 일어나고 있는지 알려면 여기에서 직업 옵션을 이해해야 합니다 .

  1. -c=> 첫 번째 문자 집합을 보완합니다. 즉, 첫 번째 문자 집합에 없는 모든 문자가 선택됩니다. 귀하의 경우 'A-Za-z'공백, 숫자, 줄 바꿈, 제어 문자와 같은 알파벳이 아닌 문자가 선택된다는 의미입니다.
  2. -ssquashed=> 연속으로 선택된 여러 문자는 하나로 처리 됩니다 .
  3. 두 번째 그룹은 매핑할 문자입니다. \12개행 문자의 8진수 ASCII 표현입니다.

즉, 모든 문자(대문자 및 소문자)는 변경되지 않고 그대로 유지되지만 문자가 아닌 문자는 단일 줄 바꿈이 됩니다.

     ----     --        --------     -     -       -----      ----
$#%! This     is        StarWars     R2    D2      robot     @work.
|---|    |---|  |------|        |---| |---| |-----|     |----|    ||
 \n        \n      \n             \n    \n     \n         \n      \n 

모든 문자는 변경되지 않고 그대로 유지되지만 일련의 문자가 아닌 문자는 줄 바꿈이 됩니다.


output:

This
is
StarWars
R
D
robot
work

관련 정보