老男孩教育每日一题-第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

时间: 2024-10-01 06:17:24

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

老男孩教育每日一题-第110天-find命令-size参数

老男孩教育每日一题-第110天-find命令-size参数1.查找当前目录下以log结尾的大于50k小于2M的普通文件2.查找当前目录下以log结尾的小于50k大于2M的普通文件以上两个问题有什么不同? 参考答案: 测试环境: [[email protected] tmp]# pwd /root/tmp [[email protected] tmp]# ll -h total 7.4M -rw-r--r-- 1 root root   262 Jul 30 15:45 a.log -rw-r--

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

题目背景: 很多运维的朋友都遇到过一个问题,输入一串命令,每次按下ctrl+c都会出现一个比较麻烦的字符信息^C请问有什么方法可以不让^C字符信息出现呢? 解决方法: 利用stty命令即可解决:中断不显示^C:  stty -echoctl终端显示^C:    stty echoctl就是这么简单,碍眼的^C字符信息就可以没有了 备注 今天是每日一题陪伴大家的第73天,期待你的进步.对于题目和答案的任何疑问,请在博客评论区留言.往期题目索引http://lidao.blog.51cto.com/

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

如下文件内容, cat /tmp/passwd root:x:0: 0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync mail:x:8:1

​老男孩教育每日一题-第62天-统计/var/log/下所有文件个数

统计/var/log/下所有文件个数 题目解析: 1./var/log/下所有文件包括当前目录和子目录以及子目录的子目录下面的文件 2.linux下文件有很多类型,包括 普通文件.链接文件.字符设备文件.块设备文件.socket文件等 以下给出三种方法与大家分享 [[email protected] ~]# find /var/log/ ! -type d |wc -l 74 [[email protected] ~]# ll -R /var/log/ |egrep "^[sl-][rwx-]{

老男孩教育每日一题-2017年5月11-基础知识点: linux系统中监听端口概念是什么?

1.题目 老男孩教育每日一题-2017年5月11-基础知识点:linux系统中监听端口概念是什么? 2.参考答案 监听端口的概念涉及到网络概念与TCP状态集转化概念,可能比较复杂不便理解,可以按照下图简单进行理解? 将整个服务器操作系统比喻作为一个别墅 服务器上的每一个网卡比作是别墅中每间房间 服务器网卡上配置的IP地址比喻作为房间中每个人 而房间里面人的耳朵就好比是监听的端口 当默认采用监听0.0.0.0地址时,表示房间中的每个人都竖起耳朵等待别墅外面的人呼唤当别墅外面的用户向房间1的人呼喊时

老男孩教育每日一题-2017年5月9日-vim命令粘贴带#号或注释信息格式会出现混乱情况怎么办

1.题目 老男孩教育每日一题-2017年5月9日-vim编辑器使用知识点:vim命令粘贴带#号或注释信息格式会出现混乱情况,有什么方法进行解决?问题说明:每次复制代码时,如果代码里有 //或# 这样的注释就容易让格式乱掉,显示的内容不整齐,并不是所期望的显示格式. 2.参考答案 原因分析: 是由于vim编辑命令的自动缩进功能所影响,因此粘贴带注释的代码时可以取消自动缩进 问题解决: vim在粘贴代码时会自动缩进,把代码搞得一团糟糕,甚至可能因为某行的一个注释造成后面的代码全部被注释掉:最初的解决

老男孩教育每日一题-2017年5月4日-有一个oldboy.txt文件,把里面所有字母都转换成大写

老男孩教育每日一题-2017年5月4日-有一个oldboy.txt文件,把里面所有字母都转换成大写 文件内容如下: [[email protected] oldboy]# cat oldboy.txt  oldboy.blog.51cto.com www.oldboyedu.com 方法一:sed [[email protected] oldboy]# sed 's#[a-z]#\u&#g' oldboy.txt OLDBOY.BLOG.51CTO.COM WWW.OLDBOYEDU.COM 方

老男孩教育每日一题-2017年5月2日-Linux系统中,不小心把chmod命令的权限弄没了,怎么解决?

老男孩教育每日一题-2017年5月2日-Linux系统中,chmod命令没有执行权限(x权限)或者chmod命令文件的权限为000,怎么解决? 解决方法有两种: 方法一: [[email protected] bin]# cp cp /oldboy/chmod.new (此时复制cp命令文件命名叫chmod.new,此时chmod.new文件有就x的权限,但chmod.new不具备有chmod命令的共功能) [[email protected] bin]# cd /oldboy/ [[email

老男孩教育每日一题-2017年05月23日-一个100M的分区,写入0.5K的,或写入1M的,可以写多少?

1.题目 老男孩教育每日一题-2017年05月23日-一个100M的磁盘分区,写入0.5K的文件,或写入1M的文件,分别可以写多少个?为什么? 2.参考答案 一个100M的磁盘分区,写入0.5K的文件,或写入1M的文件,分别可以写多少个?为什么?错误解答:很容易计算1K的个数:100*1000=100000个,1M文件的个数:100/1=100个 解答思想:先答几点知识 a.上面的考试题考察的是文件系统inode和block知识.b.inode是存放文件属性信息的(也包含指向文件实体的指针),默