Nushell
문서
쿡북
블로그
  • English
  • 中文
  • Deutsch
  • Français
  • Español
  • 日本語
  • Português do Brasil
  • Русский язык
  • 한국어
GitHub
문서
쿡북
블로그
  • English
  • 中文
  • Deutsch
  • Français
  • Español
  • 日本語
  • Português do Brasil
  • Русский язык
  • 한국어
GitHub
  • 소개
  • 설치하기
    • 기본 셸
  • 시작하기
    • 빠른 둘러보기
    • 시스템 이동
    • 누셸 방식으로 생각하기
    • 누셸 치트 시트
  • Nu 기본
    • 데이터 유형
    • 데이터 로드
    • 파이프라인
    • 문자열 작업
    • 목록 작업
    • 레코드 작업
    • 테이블 작업
    • 구조화된 데이터 탐색 및 액세스
    • 특수 변수
  • Nu에서 프로그래밍하기
    • 사용자 지정 명령
    • 별칭
    • 연산자
    • 변수
    • 제어 흐름
    • 스크립트
    • 모듈
      • 모듈 사용하기
      • 모듈 만들기
    • 오버레이
    • 정렬
    • 누셸 코드 테스트
    • 모범 사례
  • 셸로서의 Nu
    • 구성
    • 환경
    • 표준 출력, 표준 오류 및 종료 코드
    • 시스템(외부) 명령 실행
    • 타사 프롬프트 구성 방법
    • 디렉터리 스택
    • Reedline, Nu의 줄 편집기
    • 사용자 지정 완성
    • 외부 명령
    • Nu의 색상 지정 및 테마 설정
    • 후크
    • 백그라운드 작업
  • Nu로 전환하기
    • Bash에서 오신 분들을 위해
    • CMD.EXE에서 오신 분들을 위해
    • 다른 셸 및 도메인 특정 언어의 Nu 맵
    • 명령형 언어의 Nu 맵
    • 함수형 언어의 Nu 맵
    • 누셸 연산자 맵
  • 디자인 노트
    • 누셸 코드가 실행되는 방법
  • (약간)고급 사용법
    • 표준 라이브러리 (미리보기)
    • 데이터프레임
    • 메타데이터
    • 나만의 오류 만들기
    • 병렬 처리
    • 플러그인
    • explore

데이터 로드

앞서 ls, ps, date, sys와 같은 명령을 사용하여 파일, 프로세스, 시간 및 시스템 자체에 대한 정보를 로드하는 방법을 보았습니다. 각 명령은 탐색할 수 있는 정보 테이블을 제공합니다. 작업할 데이터 테이블을 로드하는 다른 방법도 있습니다.

파일 열기

데이터 작업에서 Nu의 가장 강력한 자산 중 하나는 open 명령입니다. 여러 가지 데이터 형식으로 작업할 수 있는 다중 도구입니다. 이것이 무엇을 의미하는지 보려면 json 파일을 열어 보겠습니다.

open editors/vscode/package.json
# => ──────────────────┬───────────────────────────────────────────────────────────────────────────────
# =>  name             │ lark
# =>  description      │ Lark support for VS Code
# =>  author           │ Lark developers
# =>  license          │ MIT
# =>  version          │ 1.0.0
# =>  repository       │ [row type url]
# =>  publisher        │ vscode
# =>  categories       │ [table 0 rows]
# =>  keywords         │ [table 1 rows]
# =>  engines          │ [row vscode]
# =>  activationEvents │ [table 1 rows]
# =>  main             │ ./out/extension
# =>  contributes      │ [row configuration grammars languages]
# =>  scripts          │ [row compile postinstall test vscode:prepublish watch]
# =>  devDependencies  │ [row @types/mocha @types/node tslint typescript vscode vscode-languageclient]
# => ──────────────────┴───────────────────────────────────────────────────────────────────────────────

ls와 유사한 방식으로 Nu가 이해하는 파일 형식을 열면 텍스트(또는 바이트 스트림) 이상의 것을 반환합니다. 여기서는 JavaScript 프로젝트의 "package.json" 파일을 엽니다. Nu는 JSON 텍스트를 인식하고 이를 데이터 테이블로 구문 분석할 수 있습니다.

보고 있는 프로젝트의 버전을 확인하려면 get 명령을 사용할 수 있습니다.

open editors/vscode/package.json | get version
# => 1.0.0

Nu는 현재 데이터를 테이블로 직접 로드하기 위해 다음 형식을 지원합니다.

  • csv
  • eml
  • ics
  • ini
  • json
  • nuon
  • ods
  • SQLite 데이터베이스
  • ssv
  • toml
  • tsv
  • url
  • vcf
  • xlsx / xls
  • xml
  • yaml / yml

알고 계셨나요?

내부적으로 open은 범위에서 파일 확장자와 일치하는 from ... 하위 명령을 찾습니다. 따라서 자신만의 from ... 하위 명령을 만들어 open에서 지원하는 파일 형식 집합을 간단히 확장할 수 있습니다.

하지만 이러한 형식이 아닌 텍스트 파일을 로드하면 어떻게 될까요? 시도해 보겠습니다.

open README.md

파일 내용이 표시됩니다.

내부적으로 Nu가 이러한 텍스트 파일에서 보는 것은 하나의 큰 문자열입니다. 다음으로 이러한 문자열을 사용하여 필요한 데이터를 추출하는 방법을 설명합니다.

NUON

누셸 객체 표기법(NUON)은 자바스크립트 객체 표기법(JSON)이 자바스크립트에 대해 하는 것과 같은 역할을 누셸에 대해 하는 것을 목표로 합니다. 즉, NUON 코드는 일부 데이터 구조를 설명하는 유효한 누셸 코드입니다. 예를 들어, 이것은 유효한 NUON입니다(기본 구성 파일의 예).

{
  menus: [
    # 기본 누셸 메뉴 구성
    # 소스 매개변수 없음 참고
    {
      name: completion_menu
      only_buffer_difference: false
      marker: "| "
      type: {
          layout: columnar
          columns: 4
          col_width: 20   # 선택적 값. 누락된 경우 모든 화면 너비가 열 너비를 계산하는 데 사용됩니다.
          col_padding: 2
      }
      style: {
          text: green
          selected_text: green_reverse
          description_text: yellow
      }
    }
  ]
}

JSON과 매우 유사하다는 것을 알 수 있으며, 맞습니다. NUON은 JSON의 상위 집합입니다! 즉, 모든 JSON 코드는 유효한 NUON 코드이므로 유효한 누셸 코드입니다. JSON에 비해 NUON은 더 "인간 친화적"입니다. 예를 들어, 주석이 허용되고 쉼표가 필요하지 않습니다.

현재 NUON의 한 가지 제한 사항은 모든 누셸 데이터 유형을 나타낼 수 없다는 것입니다. 가장 주목할 만한 점은 NUON이 블록의 직렬화를 허용하지 않는다는 것입니다.

문자열 처리

Nu 외부에서 들어오는 데이터로 작업할 때 중요한 부분은 Nu가 이해하는 형식이 항상 아니라는 것입니다. 종종 이 데이터는 문자열로 제공됩니다.

다음 데이터 파일이 있다고 상상해 봅시다.

open people.txt
# => Octavia | Butler | Writer
# => Bob | Ross | Painter
# => Antonio | Vivaldi | Composer

원하는 각 데이터 비트는 파이프('|') 기호로 구분되고 각 사람은 별도의 줄에 있습니다. Nu는 기본적으로 파이프로 구분된 파일 형식이 없으므로 직접 구문 분석해야 합니다.

파일을 가져올 때 가장 먼저 해야 할 일은 한 번에 한 줄씩 작업하는 것입니다.

open people.txt | lines
# => ───┬──────────────────────────────
# =>  0 │ Octavia | Butler | Writer
# =>  1 │ Bob | Ross | Painter
# =>  2 │ Antonio | Vivaldi | Composer
# => ───┴──────────────────────────────

목록으로 돌아왔기 때문에 줄 단위로 작업하고 있음을 알 수 있습니다. 다음 단계는 행을 좀 더 유용한 것으로 분할할 수 있는지 확인하는 것입니다. 이를 위해 split 명령을 사용합니다. 이름에서 알 수 있듯이 split는 구분된 문자열을 분할하는 방법을 제공합니다. split의 column 하위 명령을 사용하여 내용을 여러 열로 분할합니다. 구분 기호가 무엇인지 알려주면 나머지는 알아서 처리합니다.

open people.txt | lines | split column "|"
# => ───┬──────────┬───────────┬───────────
# =>  # │ column1  │ column2   │ column3
# => ───┼──────────┼───────────┼───────────
# =>  0 │ Octavia  │  Butler   │  Writer
# =>  1 │ Bob      │  Ross     │  Painter
# =>  2 │ Antonio  │  Vivaldi  │  Composer
# => ───┴──────────┴───────────┴───────────

거의 올바르게 보입니다. 추가 공백이 있는 것 같습니다. trim을 사용하여 추가 공백을 제거해 보겠습니다.

open people.txt | lines | split column "|" | str trim
# => ───┬─────────┬─────────┬──────────
# =>  # │ column1 │ column2 │ column3
# => ───┼─────────┼─────────┼──────────
# =>  0 │ Octavia │ Butler  │ Writer
# =>  1 │ Bob     │ Ross    │ Painter
# =>  2 │ Antonio │ Vivaldi │ Composer
# => ───┴─────────┴─────────┴──────────

나쁘지 않습니다. split 명령은 사용할 수 있는 데이터를 제공합니다. 또한 기본 열 이름을 제공합니다.

open people.txt | lines | split column "|" | str trim | get column1
# => ───┬─────────
# =>  0 │ Octavia
# =>  1 │ Bob
# =>  2 │ Antonio
# => ───┴─────────

기본 이름을 사용하는 대신 열 이름을 지정할 수도 있습니다.

open people.txt | lines | split column "|" first_name last_name job | str trim
# => ───┬────────────┬───────────┬──────────
# =>  # │ first_name │ last_name │ job
# => ───┼────────────┼───────────┼──────────
# =>  0 │ Octavia    │ Butler    │ Writer
# =>  1 │ Bob        │ Ross      │ Painter
# =>  2 │ Antonio    │ Vivaldi   │ Composer
# => ───┴────────────┴───────────┴──────────

이제 데이터가 테이블에 있으므로 이전에 테이블에서 사용했던 모든 명령을 사용할 수 있습니다.

open people.txt | lines | split column "|" first_name last_name job | str trim | sort-by first_name
# => ───┬────────────┬───────────┬──────────
# =>  # │ first_name │ last_name │ job
# => ───┼────────────┼───────────┼──────────
# =>  0 │ Antonio    │ Vivaldi   │ Composer
# =>  1 │ Bob        │ Ross      │ Painter
# =>  2 │ Octavia    │ Butler    │ Writer
# => ───┴────────────┴───────────┴──────────

문자열로 작업하는 데 사용할 수 있는 다른 명령이 있습니다.

  • str
  • lines

Nu가 이해할 수 있는 구조를 가진 데이터가 있는 경우 호출할 수 있는 도우미 명령 집합도 있습니다. 예를 들어 Rust 잠금 파일을 열어 보겠습니다.

open Cargo.lock
# => # This file is automatically @generated by Cargo.
# => # It is not intended for manual editing.
# => [[package]]
# => name = "adhoc_derive"
# => version = "0.1.2"

"Cargo.lock" 파일은 실제로 .toml 파일이지만 파일 확장자는 .toml이 아닙니다. 괜찮습니다. toml 하위 명령을 사용하여 from 명령을 사용할 수 있습니다.

open Cargo.lock | from toml
# => ──────────┬───────────────────
# =>  metadata │ [row 107 columns]
# =>  package  │ [table 130 rows]
# => ──────────┴───────────────────

from 명령은 Nu가 열고 이해할 수 있는 각 구조화된 데이터 텍스트 형식에 대해 지원되는 형식을 하위 명령으로 전달하여 사용할 수 있습니다.

원시 모드에서 열기

파일을 열고 즉시 해당 데이터 테이블로 작업할 수 있다는 것은 도움이 되지만 항상 원하는 것은 아닙니다. 기본 텍스트에 액세스하려면 open 명령에 선택적 --raw 플래그를 사용할 수 있습니다.

open Cargo.toml --raw
# => [package]                                                                                        name = "nu"
# => version = "0.1.3"
# => authors = ["Yehuda Katz <wycats@gmail.com>", "Sophia Turner <547158+sophiajt@users.noreply.github.com>"]
# => description = "A shell for the GitHub era"
# => license = "MIT"

SQLite

SQLite 데이터베이스는 파일 확장자에 관계없이 open에 의해 자동으로 감지됩니다. 전체 데이터베이스를 열 수 있습니다.

open foo.db

또는 특정 테이블을 get합니다.

open foo.db | get some_table

또는 원하는 SQL 쿼리를 실행할 수 있습니다.

open foo.db | query db "select * from some_table"

(참고: 일부 이전 버전의 Nu는 query db 대신 into db | query를 사용합니다.)

URL 가져오기

파일 시스템에서 파일을 로드하는 것 외에도 http get 명령을 사용하여 URL을 로드할 수도 있습니다. 이렇게 하면 인터넷에서 URL의 내용을 가져와 반환합니다.

http get https://blog.rust-lang.org/feed.xml
# => ╭────────────┬──────────────────╮
# => │ tag        │ feed             │
# => │ attributes │ {record 1 field} │
# => │ content    │ [table 18 rows]  │
# => ╰────────────┴──────────────────╯
GitHub에서 수정하기
Contributors: Taeyoon Kim, ImgBotApp, google-labs-jules[bot], deepthought
Prev
데이터 유형
Next
파이프라인