GNU/Linux >> Linux の 問題 >  >> Linux

Linux グループ名を 1 行の出力ではなく複数行に出力する方法

@Chris のコメントに応えて

<ブロック引用>

これは、名前にスペースが含まれていないグループに対してのみ機能します!

@c4f4t0r による承認された解決策と @bibi による解決策は、ほとんどの場合に機能することに言及する必要があります。 Cygwin を実行しており、Windows 方程式の一部は、おそらく、私がこの問題に頻繁に遭遇する理由です。それでも、通常の Linux では標準外の文字を使用してグループを作成できます (私はそう思います)。そのため、グループ名にスペースを使用する場合の解決策を示します。スペースはいつでも人生を楽しくしてくれます!

スペースが問題を引き起こす例を簡単に挙げます。スペースを含むグループ名を確認するには、id の出力全体を確認します

$ id
uid=1(me) gid=545(Users) 
groups=545(Users),66049(CONSOLE LOGON),11(Authenticated Users),
4095(CurrentSession),66048(LOCAL)

(注:StackOverflow では、出力をもう少し見やすいものにしました。)

これから、グループが {'Users', 'CONSOLE LOGON', 'Authenticated Users', 'CurrentSession', 'LOCAL'} であることがわかります

この場合、受け入れられた解決策に問題があることがわかります。

$ echo "groups:" ; for i in $(id -Gn);do echo "  - $i" ;done
    groups:
      - Users
      - CONSOLE
      - LOGON
      - Authenticated
      - Users
      - CurrentSession
      - LOCAL

いくつかのグループは名前が分かれています。必要な出力を取得するには、--zero を受け取る id コマンドを使用する必要があります。 ( -z ) 国旗。 id に渡されるすべてのフラグの詳細については、 、こちらをご覧ください。

$ man id | grep -A 1 "\-\-zero"
       -z, --zero
              delimit entries with NUL characters, not whitespace;

私たちのアプローチは、上記のものとは少し異なる必要がありますが、多くの同じ原則に従います:

$ echo "groups:"; printf "%s" "  - "; id -Gnz | \
awk 'BEGIN{FS="\0"; OFS="\n  - "}{NF--; print}'
groups:
  - Users
  - CONSOLE LOGON
  - Authenticated Users
  - CurrentSession
  - LOCAL

少し複雑な awk がある理由 末尾に常に NUL があるということです 、この場合は必要ありません。 \ 同じコマンドで次の行に進むことができるので、読みやすくなります。このコマンドは以下と同等です:

$ echo "groups:"; printf "%s" "  - "; id -Gnz | awk 'BEGIN{FS="\0"; OFS="\n  - "}{NF--; print}'

私が見たところ、ユーザーのグループを yaml に変換しようとしています 配列、使用してみてください:

echo "groups:" ; for i in $(id -Gn myuser);do echo "  - $i" ;done

groups:
  - users
  - lp
  - vboxusers
  - kvm

あなたも使うことができます:

echo "groups: [ $(groups myuser | sed -e 's/.\+\s\+:\s\+\(.\+\)/\1/g' -e 's/\(\s\+\)/, /g') ]"

groups: [ myuser, lp, vboxusers, kvm ]

bash を使用 :

for i in `groups`; do echo $i; done

tr を使用 :

groups | tr \  \\n

Linux
  1. Linuxで複数のファイルを圧縮する方法

  2. 1行で複数選択するのではなく、1行で各メニューを選択する方法は?

  3. 同じ行に複数行の出力を印刷する方法は?

  1. 単一のLinuxファイルシステムを暗号化する方法

  2. bash で複数のバックグラウンド コマンドを 1 行で実行するにはどうすればよいですか?

  3. psを印刷グループにするにはどうすればよいですか?

  1. Linuxでユーザーをグループに追加する方法

  2. コンソール アプリケーション (Linux) で印刷された文字を消去するにはどうすればよいですか?

  3. Linux で出力行ごとに 1 つのファイル名をリストするにはどうすればよいですか?