cut -d – 구분 기호가 여전히 출력에 나타납니다. 쉽게 제거하는 방법은?

cut -d – 구분 기호가 여전히 출력에 나타납니다. 쉽게 제거하는 방법은?

출력에 구분 기호가 계속 나타나는 이유는 무엇입니까? 제 생각에는 필드 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각 줄을 한 번에 처리하는 반면, jqsplit줄바꿈이 포함되어 있더라도 문자열을 전체적으로 처리합니다.

관련 정보