구분 기호가 여러 개의 공백인 경우 cut을 사용할 때 단어 분할이 수행됩니다.

구분 기호가 여러 개의 공백인 경우 cut을 사용할 때 단어 분할이 수행됩니다.

다음을 수행하는 bash 스크립트를 실행하고 있습니다.

cut -d ' ' -f2 <<< "aaa bbb"

답변을 얻었습니다 :

bbb

구분 기호로 공백이 여러 개 있는 경우(예: 3개):

cut -d ' ' -f2 <<< "aaa   bbb"

결과 :

 bbb

이것은 데비안 8에서 실행됩니다.

이제 debian 10에서 실행되는 동일한 스크립트는 다른 출력을 생성합니다.

구분 기호로 공백이 여러 개 있는 경우(예: 3개):

cut -d ' ' -f2 <<< "aaa   bbb"

결과는 단지 공백인 ""입니다.

나는 데비안 8에서 데비안 10과 동일한 동작을 원합니다. 어떤 아이디어가 있나요?

(알고 있습니다. tr -s를 사용하여 세 개의 공백을 제거할 수 있지만 동작이 다른 이유를 이해하고 싶습니다.)

감사합니다, 조스

답변1

cut나는 최근의 행동이 그런 변화를 받을 자격이 없다고 생각합니다. 또한 Debian 8.11 및 GNU coreutils 8.23을 사용하여 cut상황을 재현 할 수 없습니다.

cut그러나 매개변수 에 대시를 붙이면 -f 2-필드 2부터 시작하는 모든 필드를 얻게 됩니다. 나는 이것이 당신이 설명하는 것과 밀접하게 일치한다고 생각합니다.

$ cut -d ' ' -f2- <<< "aaa   bbb"
  bbb

출력에는 bbb필드 2(비어 있음), 3(비어 있음) 및 4( ) 사이의 필드 구분 기호인 두 개의 선행 공백이 있습니다. 귀하의 질문에 선행 공백이 있지만 이것이 의도적인지는 모르겠습니다.

답변2

내가 만들었다패치필드 모드에서 작동하고 여러 연속 구분 기호를 단일 구분 기호로 처리하는 새로운 -m명령줄 옵션이 추가되었습니다. cut이는 기본적으로 OP의 문제를 상당히 효율적인 방식으로 해결합니다. 나는 또한 이 패치가 coreutils 프로젝트에 병합되기를 바라면서 며칠 전에 이 패치 업스트림을 제출했습니다.

일부가 있습니다더 많은 생각공백 관련 기능을 더 추가하는 것에 대한 피드백을 갖고 cut이 모든 것에 대한 피드백을 제공하면 좋을 것입니다. 더 많은 패치를 구현하고 cut이를 업스트림에 제출하여 유틸리티를 더욱 다양하게 만들고 다양한 실제 시나리오에서 사용할 수 있게 만들고 싶습니다 .

관련 정보