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を全体的に処理します。

おすすめ記事