cut 명령의 구분 기호 인수는 항상 문자열 사이에 있을 것으로 예상합니까?

cut 명령의 구분 기호 인수는 항상 문자열 사이에 있을 것으로 예상합니까?

오늘 저는 cut명령에서 오랫동안 사용하고 사용했음에도 불구하고 이전에는 전혀 눈치 채지 못했던 것을 발견했습니다.

/users/developer/string 에서 추출하고 싶습니다 users. 그래서 제가 한 일은,

echo `pwd` | cut -d '/' -f1

이것은 나에게 아무런 보답도 가져오지 못했습니다. 내 가정은 구분 기호로 지정했기 때문에 /구분 기호를 찾은 후 첫 번째 필드를 반환해야 한다는 것입니다.

약간의 조정 후에 검색 명령을 변경하면 원하는 출력을 얻을 수 있다는 것을 깨달았습니다.f2

echo `pwd` | cut -d '/' -f2

이로 인해 구분 기호가 항상 기대한다는 생각이 들었습니다.무엇가 왼쪽에 있으므로 첫 번째 필드를 검색하려고 하면 아무것도 반환하지 않지만 두 번째 필드를 검색하려고 하면 예상한 결과를 얻습니다.

논리적으로 이것은 delimiter. 저는 단지 이것이 cut 명령의 구분자 매개변수가 실제로 어떻게 작동하는지 궁금합니다. 즉, 내 추론이 정확합니까 (해당 구분 기호는 항상 구분 기호 왼쪽에 무언가를 기대합니다)

답변1

f1이전의 first 와 마찬가지로 비어 있습니다 /.

 echo "/some/path/to/some/location" | cut -d '/' -f1
      |
      +--- empty

f1echo "first 와 first 사이의 내용입니다 /.


즉, 공허함은 존재하지 않습니다. 또는 문자열/필드에는 와 같은 문자가 포함될 수 없습니다 "".

예를 들어 다음과 같은 내용을 보면 더 명확해질 수 있습니다.

[In Data]   [Output fields]
             1  2  3  4  5 -f
A:B::D:E  => A, B,  , D, E
A::C:D:E  => A,  , C, D, E
:B:C:D:   =>  , B, C, D, 

왼쪽,~ 사이또는 오른쪽 - 비어 있거나 비어 있지 않습니다. 필드는 필드입니다.

답변2

페이지에는 이를 명시적으로 확인하는 man내용 이 없지만info

   -f, --fields=LIST
          select only these fields;  also print any line that contains no delimiter character, unless the -s option is specified

이는 첫 번째 필드가 첫 번째 구분 기호 앞에 옴을 나타냅니다(해당 구분 기호가 실제로 존재하지 않더라도).

나에게는 이것이 이렇게 작동한다는 것을 의심한 적이 없지만 이것이 필요한 대답이 아닐 수도 있습니다 ;-).

답변3

정의는 명확한 것 같습니다. 보고 있다구분 기호에 관한 Wikipedia 기사.

구분 기호는 일반 텍스트 또는 기타 데이터 스트림에서 별도의 독립 영역 사이의 경계를 지정하는 하나 이상의 문자 시퀀스입니다.1구분 기호의 예로는 쉼표로 구분된 값 시퀀스에서 필드 구분 기호 역할을 하는 쉼표 문자가 있습니다.

구분 기호는 데이터 스트림에서 경계를 지정하는 다양한 방법 중 하나를 나타냅니다. 예를 들어 선언적 표기법은 데이터 스트림의 시작 부분에 있는 길이 필드를 사용하여 데이터 스트림에 포함된 문자 수를 지정하는 대안입니다.

첫 번째 문장에는 "...분리되고 독립적인 영역 사이의 경계를 지정합니다..."라고 나와 있습니다. 나는 이것이 당신이 추론한 것과 정확히 일치한다고 생각합니다.

관련 정보