如何将getent passwd输出转换为指定的用户名与姓名缩写格式?
实现目标输出的命令方案
针对你的需求,这里提供两种可行的命令实现方式:
方式一:用awk一步完成所有转换
getent passwd euser5 | awk -F: '{sub(/^e/, "", $1); split($5, name_arr, " "); printf "%s,%s%s\n", $1, tolower(substr(name_arr[1], 1, 1)), tolower(name_arr[2])}'
各部分作用说明
-F::将输入的字段分隔符设置为冒号,匹配passwd文件的格式sub(/^e/, "", $1):移除用户名(第一个字段)开头的字母'e',把euser5转为user5split($5, name_arr, " "):把全名(第五个字段)按空格拆分到数组name_arr中,name_arr[1]是Ester,name_arr[2]是Jonesprintf语句:格式化输出结果,将用户名、名字首字母小写、姓氏全小写拼接成user5,ejones
方式二:基于你现有命令扩展修改
如果你想在已有的命令基础上调整,可以追加sed处理步骤:
getent passwd euser5 | cut -d: -f1,5 | sed 's/:/,/' | tr '[:upper:]' '[:lower:]' | sed -E 's/^e(.*),(.).*/\1,\2\L\E/'
最后一步sed的作用
s/^e(.*),(.).*/\1,\2\L\E/:- 捕获用户名中除开头'e'之外的部分(即
user5) - 捕获名字的首字母(即
e) \L\E将姓氏部分转为小写,最终拼接成目标格式
- 捕获用户名中除开头'e'之外的部分(即
内容的提问来源于stack exchange,提问作者keith
相关产品推荐
相关产品推荐

