출력에 구분 기호가 계속 나타나는 이유는 무엇입니까? 제 생각에는 필드 2와 4가 구분 기호 없이 나타날 것 같습니다 -
. cut
필드를 구분하는 구분 기호 자체를 표시하지 않고 명령을 어떻게 사용할 수 있습니까 ?
$ curl -s -m 2 https://am.i.mullvad.net/json | jq '.mullvad_exit_ip_hostname'
"nl-ams-wg-002"
$ curl -s -m 2 https://am.i.mullvad.net/json | jq '.mullvad_exit_ip_hostname' | sd '\"' '' | cut -d '-' -f 2,4
ams-002
답변1
sd
(그것이 무엇이든) 또는 여기에서는 필요하지 않습니다 cut
.
curl -s -m 2 https://am.i.mullvad.net/json |
jq -r '.mullvad_exit_ip_hostname|split("-")|.[1]+.[3]'
구분 기호 제거에 대한 일반적인 질문에 대해서는 GNU 구현을 통해 빈 구분 기호와 함께 옵션을 cut
사용할 수 있습니다 .--output-delimiter
$ echo a-b-c-d-e | cut -d- -f 2,4
b-d
$ echo a-b-c-d-e | cut -d- --output-delimiter= -f 2,4
bd
cut
입력에 구분 기호가 없는 경우 예상치 못한 동작에 주의하세요.
$ echo abc | cut -d- -f 2,4
abc
이 -s
옵션을 추가하면 구분되지 않은 행, 즉 0 또는 1 필드가 있는 행은 삭제되지만 요청된 필드가 없는 행은 삭제되지 않습니다.
awk
대신에 cut
더 많은 유연성을 얻고 GNU-ism을 피하기 위해 사용할 수 있습니다 .
$ echo a-b-c-d | awk -F- '{print $2 $4}'
bd
또는
$ echo a-b-c-d | awk -F- 'NF >= 4 {print $2 $4}'
bd
4개 이상의 필드가 포함된 행 1의 내용만 인쇄됩니다.
¹ 예, awk
(기본적으로) cut
각 줄을 한 번에 처리하는 반면, jq
는 split
줄바꿈이 포함되어 있더라도 문자열을 전체적으로 처리합니다.