출처: 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 공식 사이트의 설치, 시작, 고급 사용법, 내장 함수, 설정 문서를 한국어로 번역한 것입니다.