Linux cut 명령을 사용하는 방법

0
344

열린 노트북 화면의 터미널 디스플레이
Fatmawati achmad zaenuri/Shutterstock.com

리눅스 cut 명령을 사용하면 파일이나 데이터 스트림에서 텍스트의 일부를 추출할 수 있습니다. CSV 파일과 같이 구분된 데이터 작업에 특히 유용합니다. 알아야 할 사항이 있습니다.

컷 명령

그만큼 cut command는 1982년 AT&T System III UNIX의 일부로 데뷔한 Unix 세계의 베테랑입니다. 인생의 목적은 설정한 기준에 따라 파일이나 스트림에서 텍스트 섹션을 잘라내는 것입니다. 그 구문은 목적만큼 간단하지만 이 결합의 단순성 때문에 매우 유용합니다.

Linux와 BSD의 차이점은 무엇입니까?

관련된Linux와 BSD의 차이점은 무엇입니까?

유서 깊은 UNIX 방식으로 cut 다음과 같은 다른 유틸리티와 함께 grep 도전적인 문제에 대한 우아하고 강력한 솔루션을 만들 수 있습니다. 다양한 버전이 있지만 cut, 우리는 표준 GNU/리눅스 버전에 대해 논의할 것입니다. 다른 버전, 특히 cut BSD 변형에서 찾을 수 있지만 여기에 설명된 모든 옵션을 포함하지 마십시오.

다음 명령을 실행하여 컴퓨터에 설치된 버전을 확인할 수 있습니다.

cut --version

출력에 “GNU coreutils”가 표시되면 이 기사에서 설명할 버전을 사용하고 있는 것입니다. 의 모든 버전 cut 이 기능 중 일부가 있지만 Linux 버전에는 향상된 기능이 추가되었습니다.

컷이 포함된 첫 번째 단계

정보를 cut 또는 사용 cut 파일을 읽기 위해 사용하는 명령은 동일합니다. 입력 스트림에 할 수 있는 모든 것 cut 파일의 한 줄의 텍스트에서 수행할 수 있으며, 그 반대도 마찬가지. 우리는 말할 수 있습니다 cut 바이트, 문자 또는 구분 필드로 작업합니다.

단일 바이트를 선택하려면 다음을 사용합니다. -b (바이트) 옵션 및 말하기 cut 원하는 바이트 또는 바이트. 이 경우 바이트 5입니다. “how-to geek” 문자열을 cut 파이프 “|”로 명령 echo .

echo 'how-to geek' | cut -b 5

cut으로 단일 바이트 추출

해당 문자열의 다섯 번째 바이트는 “t”이므로 cut 터미널 창에 “t”를 인쇄하여 응답합니다.

지정하려면 범위 하이픈을 사용합니다. 5에서 11까지의 바이트를 추출하려면 다음 명령을 실행합니다.

echo 'how-to geek' | cut -b 5-11

cut으로 바이트 범위 추출

여러 개의 단일 바이트 또는 범위를 쉼표로 구분하여 제공할 수 있습니다. 바이트 5와 바이트 11을 추출하려면 다음 명령을 사용하십시오.

echo 'how-to geek' | cut -b 5,11

cut으로 2바이트 추출

각 단어의 첫 글자를 얻으려면 다음 명령을 사용할 수 있습니다.

echo 'how-to geek' | cut -b 1,5,8

cut으로 3바이트 추출

없이 하이픈을 사용하는 경우 첫 번째 숫자, cut 위치 1에서 숫자까지 모든 것을 반환합니다. 없이 하이픈을 사용하는 경우 둘째 숫자, cut 스트림 또는 라인의 첫 번째 숫자부터 끝까지 모든 것을 반환합니다.

echo 'how-to geek' | cut -b -6
echo 'how-to geek' | cut -b 8-

cut으로 바이트 범위 추출

문자로 자르기 사용

사용 cut 문자를 사용하는 것은 바이트와 함께 사용하는 것과 거의 동일합니다. 두 경우 모두 복잡한 문자에 특별한 주의를 기울여야 합니다. 를 사용하여 -c (문자) 옵션, 우리는 말한다 cut 바이트가 아닌 문자 측면에서 작동합니다.

echo 'how-to geek' | cut -c 1,5,8
echo 'how-to geek' | cut -c 8-11

cut으로 문자 및 문자 범위 추출

이것들은 당신이 기대하는 대로 정확하게 작동합니다. 그러나 이 예를 살펴보십시오. 6글자로 된 단어이니 물어보세요. cut 1에서 6까지의 문자를 반환하려면 전체 단어를 반환해야 합니다. 하지만 그렇지 않습니다. 한 글자 짧습니다. 전체 단어를 보려면 1에서 7까지의 문자를 요청해야 합니다.

echo 'piñata' | cut -c 1-6
echo 'piñata' | cut -c 1-7

특수 문자는 두 개 이상의 문자를 사용할 수 있습니다.

문제는 “ñ” 문자가 실제로 2바이트로 구성되어 있다는 것입니다. 우리는 이것을 아주 쉽게 볼 수 있습니다. 다음 텍스트 줄이 포함된 짧은 텍스트 파일이 있습니다.

cat unicode.txt

짧은 텍스트 파일의 내용

우리는 그 파일을 검사할 것입니다 hexdump 공익 사업. 사용 -C (표준) 옵션은 오른쪽에 해당하는 ASCII가 있는 16진수 테이블을 제공합니다. ASCII 테이블에서 “ñ”이 표시되지 않고 대신 다음을 나타내는 점이 있습니다. 인쇄할 수 없는 문자. 16진수 테이블에서 강조 표시된 바이트입니다.

hexdump -C unicode.txt

테스트 텍스트 파일의 Hexdump

이 두 바이트는 표시 프로그램(이 경우 Bash 셸)에서 “ñ”을 식별하는 데 사용됩니다. 많은 유니코드 문자는 3바이트 이상을 사용하여 단일 문자를 나타냅니다.

문자 3 또는 문자 4를 요청하면 인쇄되지 않는 문자에 대한 기호가 표시됩니다. 바이트 3을 요청하면 그리고 4에서 쉘은 이들을 “ñ”으로 해석합니다.

echo 'piñata' | cut -c 3
echo 'piñata' | cut -c 4
echo 'piñata' | cut -c 3-4

컷을 사용하여 특수 문자를 구성하는 문자 추출

구분된 데이터로 잘라내기 사용

우리는 물어볼 수 있습니다 cut 지정된 구분 기호를 사용하여 텍스트 줄을 분할합니다. 기본적으로 cut은 탭 문자를 사용하지만 우리가 원하는 것을 사용하도록 지시하기 쉽습니다. “/etc/passwd” 파일의 필드는 콜론 “:”으로 구분되므로 이를 구분 기호로 사용하고 일부 텍스트를 추출합니다.

구분 기호 사이의 텍스트 부분을 필드그리고 바이트나 문자처럼 참조되지만 앞에는 -f (필드) 옵션. “f”와 숫자 사이에 공백을 두거나 두지 않을 수 있습니다.

첫 번째 명령은 다음을 사용합니다. -d (구분 기호) “:”를 구분 기호로 사용하도록 컷에 지시하는 옵션. “/etc/passwd” 파일의 각 줄에서 첫 번째 필드를 가져옵니다. 그것은 긴 목록이 될 것이므로 우리는 head 와 더불어 -n (숫자) 옵션을 선택하면 처음 5개의 응답만 표시됩니다. 두 번째 명령은 동일한 작업을 수행하지만 다음을 사용합니다. tail 마지막 5개의 응답을 보여줍니다.

cut -d':' -f1 /etc/passwd | head -n 5
cut -d':' -f2 /etc/passwd | tail -n 5

/etc/passwd 파일에서 필드 범위 추출

필드 선택을 추출하려면 쉼표로 구분된 목록으로 나열하십시오. 이 명령은 1~3, 5, 6 필드를 추출합니다.

cut -d':' -f1-3,5,6 /etc/passwd | tail -n 5

/etc/passwd 파일에서 필드 범위 추출

포함하여 grep 명령에서 “/bin/bash”가 포함된 행을 찾을 수 있습니다. 이는 Bash가 기본 셸로 포함된 항목만 나열할 수 있음을 의미합니다. 일반적으로 “일반” 사용자 계정이 됩니다. 일곱 번째 필드는 기본 쉘 필드이고 우리는 이미 그것이 무엇인지 알고 있기 때문에 1에서 6까지의 필드를 요청할 것입니다.

grep "/bin/bash" /etc/passwd | cut -d':' -f1-6

/etc/passwd 파일에서 1~6 필드 추출

하나를 제외한 모든 필드를 포함하는 또 다른 방법은 다음을 사용하는 것입니다. --complement 옵션. 이것은 필드 선택을 반전시키고 다음과 같은 모든 것을 보여줍니다. 하지 않았다 요청되었습니다. 마지막 명령을 반복하되 필드 7만 요청합시다. 그런 다음 해당 명령을 다시 실행합니다. --complement 옵션.

grep "/bin/bash" /etc/passwd | cut -d':' -f7
grep "/bin/bash" /etc/passwd | cut -d':' -f7 --complement

--complement 옵션을 사용하여 필드 선택 반전

첫 번째 명령은 항목 목록을 찾지만 필드 7은 항목을 구분할 수 있는 정보를 제공하지 않으므로 항목이 누구를 참조하는지 알 수 없습니다. 두 번째 명령에서 --complement 옵션을 선택하면 필드 7을 제외한 모든 항목이 표시됩니다.

파이핑 컷 인 컷

“/etc/passwd” 파일을 고수하면서 필드 5를 추출해 보겠습니다. 이것은 사용자 계정을 소유한 사용자의 실제 이름입니다.

grep "/bin/bash" /etc/passwd | cut -d':' -f5

/etc/passwd 파일의 다섯 번째 필드에는 쉼표로 구분된 하위 필드가 있을 수 있습니다.

다섯 번째 필드에는 쉼표로 구분된 하위 필드가 있습니다. 거의 채워지지 않으므로 쉼표 줄로 표시됩니다.

이전 명령의 출력을 다른 호출로 파이핑하여 쉼표를 제거할 수 있습니다. cut . 의 두 번째 사례 cut 쉼표 “,”를 구분 기호로 사용합니다. 그만큼 -s (구분으로만) 옵션은 cut 구분 기호가 전혀 없는 결과를 억제합니다.

grep "/bin/bash" /etc/passwd | cut -d':' -s -f5 | cut -d',' -s -f1

두 가지 유형의 구분 기호를 처리하기 위해 절단된 배관

루트 항목에는 다섯 번째 필드에 쉼표 하위 필드가 없기 때문에 표시되지 않고 원하는 결과를 얻습니다. 이 컴퓨터에 구성된 “실제” 사용자의 이름 목록입니다.

관련된: Linux 파일 권한은 어떻게 작동합니까?

출력 구분 기호

쉼표로 구분된 값이 있는 작은 파일이 있습니다. 이 더미 데이터의 필드는 다음과 같습니다.

  • ID: 데이터베이스 ID 번호
  • 첫 번째: 주제의 이름입니다.
  • 마지막: 주제의 성.
  • 이메일: 그들의 이메일 주소.
  • IP 주소: 그들의 IP 주소.
  • 상표: 그들이 운전하는 자동차 브랜드.
  • 모델: 그들이 운전하는 자동차의 모델.
  • 년도: 자동차가 만들어진 해.
cat small.csv

더미 CSV 데이터의 텍스트 파일

컷에 쉼표를 구분 기호로 사용하도록 지시하면 이전과 마찬가지로 필드를 추출할 수 있습니다. 때로는 파일에서 데이터를 추출해야 하지만 결과에 필드 구분 기호를 포함하고 싶지 않을 때가 있습니다. 사용 --output-delimiter 우리는 컷이 어떤 캐릭터인지 알 수 있습니다. 순서– 실제 구분 기호 대신 사용합니다.

cut -d ',' -f 2,3 small.csv
cut -d ',' -f 2,3 small.csv --output-delimiter=" "

--output-delimiter를 사용하여 결과의 ​​구분 기호 변경

두 번째 명령은 다음을 알려줍니다. cut 쉼표를 공백으로 대체합니다.

더 나아가 이 기능을 사용하여 출력을 수직 목록으로 변환할 수 있습니다. 이 명령은 새 줄 문자를 출력 구분 기호로 사용합니다. 개행 문자를 사용하기 위해 포함해야 하는 “$”에 유의하세요. 두 문자의 리터럴 시퀀스로 해석되지 않습니다.

우리는 사용할 것입니다 grep Morgana Renwick에 대한 항목을 필터링하고 cut 필드 2에서 레코드 끝까지 모든 필드를 인쇄하고 개행 문자를 출력 구분 기호로 사용합니다.

grep 'renwick' small.csv | cut -d ',' -f2- --output-delimiter=$''

줄 바꿈 문자를 출력 구분 기호로 사용하여 레코드를 목록으로 변환

올드하지만 골디

글을 쓰는 시점에서 little cut 명령어는 40주년을 앞두고 있고, 우리는 여전히 그것을 사용하고 있으며, 오늘날 그것에 대해 쓰고 있습니다. 오늘날 텍스트를 자르는 것은 40년 전과 같다고 생각합니다. 즉, 올바른 도구가 있으면 훨씬 쉬워집니다.

관련된: 알아야 할 37가지 중요한 Linux 명령