오늘 저는 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
f1
echo "
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구분 기호의 예로는 쉼표로 구분된 값 시퀀스에서 필드 구분 기호 역할을 하는 쉼표 문자가 있습니다.
구분 기호는 데이터 스트림에서 경계를 지정하는 다양한 방법 중 하나를 나타냅니다. 예를 들어 선언적 표기법은 데이터 스트림의 시작 부분에 있는 길이 필드를 사용하여 데이터 스트림에 포함된 문자 수를 지정하는 대안입니다.
첫 번째 문장에는 "...분리되고 독립적인 영역 사이의 경계를 지정합니다..."라고 나와 있습니다. 나는 이것이 당신이 추론한 것과 정확히 일치한다고 생각합니다.