문제

내가 사용하려는 공간으로 구분과 cut 명령입니다.

어떤 구문을 사용할 수 있는 이?

도움이 되었습니까?

해결책

cut -d ' ' -f 2

여기서 2는 당신이 원하는 공간 지정 필드의 필드 번호입니다.

다른 팁

일반적으로 공간을 구분 기호로 사용하는 경우 여러 공간을 하나로 취급하려고합니다. 일부 열을 공백과 정렬하는 명령의 출력을 구문 분석하기 때문입니다. (그리고 Google 검색을 위해 여기로 나를 이끌어냅니다)

이 경우 단일 cut 명령은 충분하지 않으므로 사용해야합니다.

tr -s ' ' | cut -d ' ' -f 2

또는

awk '{print $2}'

기존의 유용한 답변을 보완하기 위해; 모자 끝 QZ 지원 별도의 답변을 게시하도록 격려하기 위해 :

두 가지 뚜렷한 메커니즘 여기에 오십시오 :

  • (a) 여부 cut 그 자체 구분 기자 (공간,이 경우)가 -d 옵션 옵션 별도의 인수 또는 그것을 추가하는 것이 허용되는지 여부 곧장 에게 -d.

  • (b) 어떻게 껍데기 일반적으로 인수를 호출하기 전에 인수를 전달하기 전에 논쟁을 구문 분석합니다.

(a) 유틸리티에 대한 POSIX 지침 (강조 광산)

표준 유틸리티의 개요가 필수적인 옵션 관습 [...] 준수 응용 프로그램 사용한다 분리된 해당 옵션에 대한 인수 및 옵션 관점. 하지만, 준수 구현이 있어야한다 또한 문자를 개입하지 않고 동일한 인수 문자열에 옵션 및 옵션 학습을 지정하도록 응용 프로그램이 허용됩니다..

다시 말해 :이 경우, 왜냐하면 -d옵션 관습입니다 필수적인, 당신은 할 수 있습니다 선택하다 구분자를 지정할지 여부:

  • (s) 중 하나 : a 분리된 논쟁
  • (d) 또는 값으로 직접 첨부 에게 -d.

(S) 또는 (D)를 선택하면 껍데기의 문자열 - 문자 구문 분석 - (b) - 중요 :

  • 접근 방식 (에스), 다음 모든 양식은 다음과 같습니다.

    • -d ' '
    • -d " "
    • -d \<space> # <space> used to represent an actual space for technical reasons
  • 접근 방식 (디), 다음 모든 양식은 다음과 같습니다.

    • -d' '
    • -d" "
    • "-d "
    • '-d '
    • d\<space>

동등성은 다음과 같이 설명됩니다 껍데기문자열 지표 처리 :

모두 위의 솔루션이 발생합니다 똑같은 문자열 (각 그룹에서) 시간 cut 그들을 본다:

  • (에스): cut 본다 -d, 그대로 소유하다 논쟁, 그 뒤에 a 분리된 우주 문자가 포함 된 인수 - 인용문이 없거나 \ 접두사!.

  • (디): cut 본다 -d ...을 더한 우주 문자 - 인용문이없는 또는 \ 접두사! -의 일부로 같은 논쟁.

각 그룹의 양식이 궁극적으로 동일하는 이유는 어떻게 껍데기 구문 분석 문자열 리터럴:

  • 쉘은 리터럴을 지정할 수 있도록합니다 그대로 ~을 통해 호출되는 메커니즘 인용, 걸릴 수 있습니다 여러 형태:
    • 단일 크기 문자열 : 내부 내용 '...' 촬영됩니다 문자 그대로 그리고 형태 a 하나의 논쟁
    • 이중 인용 문자열 : 내부 내용 "..." 또한 형성 a 하나의 논쟁이지만 그에 따릅니다 보간 (변수 참조를 확장합니다 $var, 명령 대체 ($(...) 또는 `...`) 또는 산술 확장 ($(( ... ))).
    • \-인용 개인 캐릭터: ㅏ \ 단일 문자 앞에 해당 캐릭터가 문자 그대로 해석됩니다.
  • 인용문은 보완됩니다 견적 제거, 일단 쉘이 명령 줄을 구문 분석 한 후 제거합니다 인용 인용 인증서 (둘레를 둘러싸고 있습니다 '...' 또는 "..." 또는 \ 인스턴스) - 따라서 호출되는 명령은 인용 문자를 보지 못합니다.

당신은 또한 말할 수 있습니다

cut -d\  -f 2

백 슬래시 다음에 두 개의 공간이 있습니다.

방금 발견되었습니다 당신도 사용할 수 있습니다 "-d ":

cut "-d "

테스트

$ cat a
hello how are you
I am fine
$ cut "-d " -f2 a
how
am

짧은 꼬리, 컷 같은 유틸리티 (똑똑하지만 느리게 만든). 공백을 깨는 것은 기본값이지만 다중 문장, 대체 Regexes 등을 깨뜨릴 수도 있습니다.

scut -f='6 2 8 7' < input.file  > output.file

따라서 위의 명령은 공백에서 열을 나누고 그 순서대로 (0 기반) cols 6 2 8 7을 추출합니다.

당신은 그것을 할 수 없으로 쉽게 절단하는 경우에 데이터가 예를 들어 여러 공간이 있습니다.나는 그것을 발견한 유용한 정규화하는 입력한 쉽게 처리합니다.중 하나를 사용하는 방법에 대한 sed 정상화는 다음과 같습니다.

echo -e "foor\t \t bar" | sed 's:\s\+:\t:g' | cut -f2  #bar

나는 대답이있다 (나는 다소 혼란스러운 대답을 인정한다)sed, 정기적 인 표현 및 캡처 그룹 :

  • \S* - 첫번째 단어
  • \s* - 분리기
  • (\S*) - 두 번째 단어 - 캡처
  • .* - 나머지 라인

A로 sed 표현, 캡처 그룹은 탈출해야합니다. \( 그리고 \).

그만큼 \1 캡처 된 그룹의 사본, 즉 두 번째 단어를 반환합니다.

$ echo "alpha beta gamma delta" | sed 's/\S*\s*\(\S*\).*/\1/'
beta

이 답을 살펴보면 다소 혼란스럽고 왜 귀찮게 생각할까요? 글쎄, 나는 일부 사람들이 "아하!" 이 패턴을 사용하여 하나의 복잡한 텍스트 추출 문제를 해결합니다. sed 표현.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top