나는 방법에 대한 혼란 스러워요 -s
, -t
그리고 -c
옵션에서 작동 그럴 명령. 내가 할 때
echo I am a good boy | tr good bad
나는 출력을 얻는다 :
I am a bddd bdy
o
에서 반복 되기 때문에 이것은 매우 이해할 수 good
있습니다. 대신에, 최후의 가능한 변화 o
IS d
, 따라서 출력.
이제 내가 할 때
echo I am a good boy | tr -s good bad
출력은
I am a bd bdy
-s
옵션으로 하나의 선두로부터 1 세트의 각 문자마다 반복 선두로부터 짜내 후 동일한 위치에 세트 2에 대응하는 문자 세트에 하나의 각 문자를 변경할 예정이다.
그래서 그것은
I am a bad bay.
왜 변화?
또한 내가 할 때
echo I am a good boy | tr -c good bad
나는 얻다 dddddddgoodddodd
이 예제를 참조 하여 -c
옵션이 어떻게 작동 tr
합니까?
그리고 마지막으로 : 좋은 소년에서 나쁜 소년으로 나 자신을 바꾸는 방법 …. 🙂 : P 즉,
echo I am a good boy | tr <something>
나에게 출력을 제공합니다 : I am a bad boy
.
답변
-s
스위치 : 짜기 (반복 된 문자 제거)
echo i am a good boy | tr -s good bad
산출:
i am a bd bdy
이런 일이 일어나도록 두 가지 일이 있습니다. 먼저 두 번째 인수가 tr
첫 번째 인수 보다 짧은 경우 두 번째 인수 의 마지막 문자 가 첫 번째 인수와 동일한 길이로 반복됩니다. 따라서 동등한 명령은 다음과 같습니다.
echo i am a good boy | tr -s good badd
무슨 일이 일어나고 다른 것은 첫 번째 인수의 문자들이 이전 발생을 (내가 두 말하는 겁니다 덮어 반복 할 때입니다 oo
에서의 good
). 이제 명령이 다음과 같습니다.
echo i am a good boy | tr -s god bdd
(두 번째 o
로 d
교체 이전 덮어 o
에 a
이 중복 만들기, 교체)
-s
스위치가 없으면 출력은
i am a bddd bdy
-s
스위치를 사용하면 마지막 출력을 떠나는 마지막 인수에 tr
나열된 반복되는 문자를 ‘압축’합니다 .
i am a bd bdy
-c
스위치 : 보완
이 -c
스위치는 첫 번째 인수 (즉, 인수 1에 나열되지 않은 모든 문자)의 보수를 일치시키는 데 사용됩니다. 결과적으로 arg 1에는 많은 문자 (256-3)가 포함됩니다. 이제, 앞의 경우와 마찬가지로 arg 2에서도 같은 일이 발생합니다. Arg 2의 마지막 문자는 길이 또는 Arg 1과 일치하도록 반복됩니다.
echo i am a good boy | tr -c good bad
다음과 같습니다.
echo i am a good boy | tr abcefhijklmnp... baddddddddddd...
(누락주의 g
, o
그리고 d
첫 세트에서, 또한주의 d
– 공백 문자를 포함하여 두 번째 세트의 다른 모든 문자를 대체합니다)
이 이유 i am a good boy
에 회전dddddddgoodddodd
자세한 정보는 여기 : http://www.linuxjournal.com/article/2563
답변
귀하의 이해 -s
는 하나의 문자 입력에 설정 한 문자의 발생을 반복 대체 올바르지 않습니다. 예를 들어 세트를 수정하지 않습니다.
echo i am a good boy | tr -s god bad
준다
i am a bad bay
이 -c
옵션은 세트 1을 보수 (즉, 세트 1에 포함되지 않은 모든 문자 세트)로 대체합니다. 이를 사용하여 예를 들어 지정된 문자를 제외한 모든 문자를 제거 할 수 있습니다.
echo i am a good boy | tr -cd gobdy
출력
goodboy
답변
다른 답변 덮여 tr
들 ‘ -s
, -t
및 -c
옵션하지만 완전성을 위해 :
잘못된 도구를 선택했기 때문에 문제가 있습니다.
tr
문자 변환 용sed
스트림 편집 용입니다.
스트림에서 good
및 bad
문자 시퀀스 모두 sed
가 더 적합합니다.
echo I am a good boy | <something>
나에게 출력을 제공합니다 : I am a bad boy
$ echo I am a good boy | sed s/good/bad/g
I am a bad boy
은 s/..../..../
대체입니다. 첫 번째 정규식과 일치하는 것이 두 번째 정규식으로 바뀝니다. 마지막에있는 /g
플래그는 이런 방식으로 전역 교체를위한 것이며 모든 경우는 처음이 아니라 교체됩니다.
$ echo I am a good boy and a good boy is me. | sed s/good/bad/
I am a bad boy and a good boy is me.
$ echo I am a good boy and a good boy is me. | sed s/good/bad/g
I am a bad boy and a bad boy is me.
답변
예. 바로 그거죠!
tr -s
반복되는 문자의 인스턴스를 단일 문자로 바꿉니다.
(man 페이지를 통해)
따라서 다음과 같이 진행됩니다.
로 변환 good
됩니다 bddd
. 반복되는 인스턴스는 3 ‘d입니다.
따라서이 세 인스턴스를 단일 인스턴스로 바꿉니다.
그것은 그것이 bd가되게하는 것입니다. 🙂