AI 지식 / / 2025. 5. 31. 14:35

fx: 터미널 JSON 뷰어 & 프로세서 (fx - Terminal JSON Viewer & Processor)

출처: https://fx.wtf/install, https://fx.wtf/getting-started, https://fx.wtf/advanced-usage, https://fx.wtf/functions, https://fx.wtf/configuration


설치 (Installation)

시스템이나 선호도에 따라 아래 방법 중 하나로 fx를 설치할 수 있습니다.

패키지 매니저로 설치

brew install fx
snap install fx
scoop install fx
pacman -S fx
pkg install fx
go install github.com/antonmedv/fx@latest
docker run -it --rm -v .:/data:ro antonmedv/fx file.json
nix-shell -p fx

바이너리 다운로드

GitHub Releases 페이지에서 최신 바이너리를 다운로드하거나, 아래 명령어로 자동 설치할 수 있습니다.

curl https://fx.wtf/install.sh | sh

설치 스크립트는 시스템에 맞는 바이너리를 /usr/local/bin에 설치합니다.

Windows 설치

Windows 사용자는 Go를 설치한 후 아래 명령어를 실행하세요.

go install github.com/antonmedv/fx@latest

자동완성(Autocomplete)

.bashrc 또는 .zshrc에 다음을 추가하면 자동완성 기능을 사용할 수 있습니다.

source <(fx --comp bash)
source <(fx --comp zsh)
fx --comp fish | source

GitHub Actions에서 사용

Node.js 환경이 제공되는 GitHub Actions에서는 npx로 fx를 사용할 수 있습니다.

steps:
  - name: Bump version
    run: npx fx package.json 'x.version = x.version.replace(/\d+$/, n => +n + 1), x' save

Node & Deno

npm install -g fx
deno install -A npm:fx

참고: JavaScript 버전의 fx는 비대화형(non-interactive) 모드만 지원하며, JSON 처리 기능만 제공합니다.


시작하기 (Getting Started)

fx는 터미널에서 JSON을 인터랙티브하게 보여주고, JavaScript로 변환할 수 있는 CLI 도구입니다. Go로 작성되었으며, 내장 JS 엔진(goja)을 사용합니다.

인터랙티브 모드 실행

fx data.json

JSON 처리 예시

fx에서 인자는 JavaScript 함수로 처리됩니다. 입력 데이터는 각 함수로 순차적으로 전달됩니다.

echo '{"name": "world"}' | fx 'x => x.name' 'x => `Hello, ${x}!`'

표준 JS 함수도 사용할 수 있습니다.

echo '{"name": "world"}' | fx 'Object.keys'

문법 설탕(Syntactic Sugar)

  • 입력 데이터는 x 또는 this로 참조할 수 있습니다.
  • 표현식을 .으로 시작하면 x => x.를 생략할 수 있습니다.
echo '{"name": "world"}' | fx .name '`Hello, ${x}!`'

INFO: fx는 f(x)의 의미에서 이름이 유래되었습니다.

스트리밍 모드

라인 단위 또는 이어진 JSON 스트림도 처리할 수 있습니다.

echo '{"text": "Hello"}{"text": "World!"}' | fx .text

출력:

Hello
World!

여러 JSON을 배열로 묶어 처리하려면 --slurp 또는 -s 옵션을 사용하세요.

echo '{"text": "Hello"}{"text": "World!"}' | fx --slurp '.map(x => x.text)' '.join(", ")'

출력:

Hello, World!

인터랙티브 탐색

파이프를 통해 JSON을 fx에 전달하면 인터랙티브 모드로 탐색할 수 있습니다.

curl -i https://fx.wtf/example.json | fx

또는:

fx example.json
  • 명령어를 잊었을 때는 ?를 눌러 키 바인딩을 확인하세요.
  • 화살표/vi 키로 탐색, .로 경로 조정, @로 경로 퍼지 검색, [/]로 이전/다음 위치 이동
  • /로 정규식 검색, n/N으로 결과 이동
  • p로 현재 값 미리보기, P로 stdout 출력
  • 마우스 이벤트 비활성화: FX_NO_MOUSE 환경변수 사용

TIP: 텍스트 선택은 터미널에 따라 fn/option/shift 키를 조합해 사용하세요.


고급 사용법 (Advanced Usage)

JSON 예쁘게 출력(Pretty print)

echo '{"name": "world"}' | fx .

매핑(Mapping)과 문법 설탕

curl https://fx.wtf/example.json | fx '.issues.map(x => x.title)'
# 또는
curl https://fx.wtf/example.json | fx '.issues[].title'
  • [].flatMap(x => x)의 축약형입니다.
  • @.map(x => x)의 축약형으로, bash/zsh에서 따옴표 없이 사용 가능
curl https://fx.wtf/example.json | fx .issues @.title

JSON 수정

echo '{"count": 1}' | fx '{...x, count: x.count + 1}'
fx example.json '.owner.login = "me", x'
  • , 연산자는 JS의 시퀀스 연산자로, 마지막 값이 반환됩니다.

파일 직접 수정(Edit-in-place)

fx example.json 'x.name = x.name.toUpperCase(), x' 'save'

BigInt 지원

echo '{"count": 1234567890987654321}' | fx '.count + 1n'

비JSON 데이터 처리

ls | fx -r '[x, x.includes(".md")]'
ls | fx -rs '.filter(x => x.includes(".md"))'
ls | fx -r '.includes(".md") ? this : skip'
ls | fx -rs '.filter(x => x.includes(".md"))' list

사용자 함수(.fxrc.js)

.fxrc.js 파일(현재 디렉터리, 홈, XDG config)에 사용자 함수를 정의할 수 있습니다.

function addOne(x) {
    return x + 1
}

사용 예시:

echo '1' | fx addOne

내장 함수 (Built-in Functions)

  • len(x): 배열, 문자열, 객체의 길이 반환
  • uniq(x): 배열의 중복 제거
  • sort(x): 배열 정렬
  • sortBy(fn): 함수 기준 배열 정렬
  • map(fn): 배열 매핑
  • groupBy(fn): 함수 기준 배열 그룹화
  • chunk(size): 배열을 지정 크기로 분할
  • flatten(x): 배열 평탄화
  • reverse(x): 배열 역순
  • keys(x): 객체의 키 배열 반환
  • values(x): 객체의 값 배열 반환
  • list(x): 배열을 리스트로 출력
  • save(x): 입력 데이터를 파일에 저장(수정)
  • toBase64(x): 문자열을 base64로 인코딩
  • fromBase64(x): base64 문자열 디코딩
  • YAML.stringify(x): JSON을 YAML로 변환
  • YAML.parse(x): YAML을 JSON으로 변환

예시

curl https://fx.wtf/example.json | fx len
curl https://fx.wtf/example.json | fx '.users[].roles' uniq
curl https://fx.wtf/example.json | fx .issues 'map(x => x.title)'
echo '[1,2,3,4,5]' | fx 'chunk(2)'
echo '{"a": 1, "b": 2}' | fx keys
echo '[1, 2, 3]' | fx list | xargs -I{} echo "The number is {}"

INFO: YAML은 --yaml 플래그나 .ya?ml 확장자로 자동 인식됩니다.


설정 (Configuration)

환경변수로 fx의 동작을 설정할 수 있습니다.

  • FX_SHOW_SIZE: 배열/객체의 요소 개수 표시
      export FX_SHOW_SIZE=true
    • 인터페이스에서 s s로 토글
  • FX_LINE_NUMBERS: 라인 번호 표시
      export FX_LINE_NUMBERS=true
    • 인터페이스에서 s l로 토글
  • FX_NO_MOUSE: 마우스 이벤트 비활성화
      export FX_NO_MOUSE=true
    • 텍스트 선택은 fn/option/shift 키 조합 사용
  • FX_THEME: 테마 지정
      export FX_THEME=5
      fx --themes # 테마 미리보기
    • 직접 테마 추가 가능(theme.go 수정 후 PR)

본 문서는 fx.wtf 공식 사이트의 설치, 시작, 고급 사용법, 내장 함수, 설정 문서를 한국어로 번역한 것입니다.

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유