我想格式化来自baz
的用户帐户的输出,以仅显示名称,角色和目录路径,所有这些都以逗号分隔。我知道这应该很简单,但对于我的生活,我无法弄清楚如何在某些冒号之间展示。 (注意这应该适用于任何用户名,而不仅仅是ex)
Ex /etc/passwd
:
grep joe /etc/passwd
期望输出:
joe:x:1001:1001:System Admin:/home/joe:/bin/bash
谢谢!
答案 0 :(得分:5)
awk 'BEGIN{ FS=":"; OFS=", " } $1=="joe" { print $1,$5,$6; exit }' /etc/passwd
(但是下次你应该多付出一些努力 - 你的问题非常不容易讨论:))
答案 1 :(得分:4)
cut
使用逗号作为--output-delimiter
:
cut -d: -f1,5,6 --output-delimiter=, /etc/passwd
答案 2 :(得分:2)
尝试:
grep joe /etc/passwd | cut -d: -f1,5,6
如果真的需要“,”作为分隔符:
grep "^joe:" /etc/passwd | cut -d: -f1,5,6 | tr : ,
“^”确保仅截取该行开头的“joe”匹配(感谢PSkocik提醒)。默认情况下,grep
会接受regex
。
bash中的翻译,但有两行:
x=`grep joe /etc/passwd | cut -d: -f1,5,6`
echo ${x/:/,}
答案 3 :(得分:0)
如果你想纯粹在shell中做(POSIX sh就足够了,不需要Bash),那么read
就是你的朋友:
while IFS=: read user pw uid gid gecos home shell ; do
if [ "$user" = "joe" ] ; then
echo "$user, $gecos, $home"
fi
done < /etc/passwd
答案 4 :(得分:0)
添加变体,在bash中,您可以将grep
的输出直接传递到括号read
的括号中,并根据需要使用IFS
分隔字段。使用字段的短名称,您可以:
grep '^joe:' /etc/passwd |
{ IFS=: read -r u x uid gid n h s; echo "$u, $n, $h"; }
哪个会给你寻求的输出(如果/etc/passwd
包含条目)