老男孩教育每日一题-第61天-使用命令调换 /etc/passwd 文件里所有的第一列和最后一列位置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了老男孩教育每日一题-第61天-使用命令调换 /etc/passwd 文件里所有的第一列和最后一列位置相关的知识,希望对你有一定的参考价值。

老男孩教育每日一题-第61天-使用命令调换 /etc/passwd 文件里 root 位置和/bin/bash 位置?即将所有的第一列和最后一列位置调换?

例:默认:root:x:0:0:root:/root:/bin/bash

修改后:/bin/bash:x:0:0:root:/root:root

参考答案:

方法1:每列之前由冒号分隔,首先想到awk擅长取列,所以第一种方法使用awk,分隔符冒号

具体方法:每行分3组,第一组字母、数字、下划线、- 组成,第二组第一个冒号到最后一个冒号,第三组是斜 线(/)到最后,以下给出两个参考

发现分隔符变成了空格,再使用tr 把分隔符替换成冒号

[email protected] ~
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
/sbin/nologin:x:3:4:adm:/var/adm:adm
/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp
/bin/sync:x:5:0:sync:/sbin:sync
/sbin/shutdown:x:6:0:shutdown:/sbin:shutdown
/sbin/halt:x:7:0:halt:/sbin:halt
/sbin/nologin:x:8:12:mail:/var/spool/mail:mail
......
这样就完成题目要求了

为了省略 $2,$3,...$6这些内容,我们可以直接把第一列和最后一列交换,这里需要用到自定义变量,得出下 面一个方法awk -F ":" ‘{a=$1;$1=$NF;$NF=a;print}‘ /etc/passwd|tr " " ":"

继续优化以上方法,使用awk内置变量OFS(输出分隔符),设置输出分隔符为冒号awk -F ":" ‘{OFS=":";a=$1;$1=$NF;$NF=a;print}‘ /etc/passwd

方法2:使用sed命令,对每行进行分组正则匹配,然后后向引用输出

具体方法:每行分3组,第一组字母、数字、下划线、- 组成,第二组第一个冒号到最后一个冒号,第三组是斜 线(/)到最后,以下给出两个参考

sed -r ‘s#(^[a-Z0-9_-]+)(:.*:)(/.*$)#\3\2\1#‘ /etc/passwd
sed -r ‘s#(^[^:]+)(:.*:)(/.*$)#\3\2\1#‘ /etc/passwd


今天是每日一题陪伴大家的第60天期待你的进步

对于题目和答案的任何疑问,请在博客评论区留言
往期题目索引

http://lidao.blog.51cto.com/3388056/1914205


本文出自 “李导的博客” 博客,请务必保留此出处http://lidao.blog.51cto.com/3388056/1934816

以上是关于老男孩教育每日一题-第61天-使用命令调换 /etc/passwd 文件里所有的第一列和最后一列位置的主要内容,如果未能解决你的问题,请参考以下文章

​老男孩教育每日一题-第64天 -sed命令闯关

老男孩教育每日一题-第60天-一道实用Linux运维问题的9种Shell解答方法!

​老男孩教育每日一题-第73天 -基础命令点:可恶的^C

​老男孩教育每日一题-第79天-命令风暴:打印出001 002 003 这样的格式的数字

老男孩教育每日一题-第104天-如何查看linux系统时间?若当前系统时区不是中国,如何修改?

老男孩教育每日一题-第126天-通过shell脚本打印乘法口诀表