sed与grep练习题
第1章 练习题
第1题 取得/etc/hosts 文件的权限
如何取得/etc/hosts 文件的权限对应的数字内容,如-rw-r--r-- 为 644,要求使用命令取得644 这样的数字。
方法一 awk 指定分隔符
[root@node2 ~]# stat /etc/hosts |awk -F "[0/]" 'NR==4{print $2}' 644
方法二 stat -c%a
[root@node2 ~]# stat -c%a /etc/hosts 644
第2题 目录的硬链接数
linux 下通过 mkdir 命令创建一个新目录/clsn/ett,它的硬链接数是多少,为什么?
如果在/clsn/ett下面再创建一个目录 test。再问/clsn/ett 的硬链接数是多少?为什么。
新目录的硬链接数为2
[root@node2 ~]# mkdir /clsn/ett -p [root@node2 ett]# ls -ldi /clsn/ett/ 651845 drwxr-xr-x. 2 root root 6 12月 2 10:38 /clsn/ett/
目录下的硬链接数为 2+下级目录数
[root@node2 ett]# mkdir dir01/ [root@node2 ett]# ls -ldi /clsn/ /clsn/. /clsn/ett/.. 50974252 drwxr-xr-x. 3 root root 17 12月 2 10:38 /clsn/ 50974252 drwxr-xr-x. 3 root root 17 12月 2 10:38 /clsn/. 50974252 drwxr-xr-x. 3 root root 17 12月 2 10:38 /clsn/ett/..
第3题 取出ip地址
执行命令取出 linux中 eth0 的 IP地址。
方法一 awk
[root@node2 ett]# ifconfig ens33|awk -F "[ :]+" 'NR==2{print $3}' 192.168.1.223
方法二 grep
[root@node2 ett]# ifconfig ens33|egrep "([0-9]{1,3}\.?){4}" -o |head -3|tail -1 192.168.1.223
内容在同一行输出
在一个命令上加什么参数可以实现下面命令的内容在同一行输出。
-n 不输出每行行尾的回车
-e 让echo支持 \n \t 转移字符系列
\n 换行
\t tab键
[root@node2 scprits]# echo -n "123" ; echo "223" 123223 [root@node2 scprits]# echo -n "123" 123[root@node2 scprits]# echo -e "123\n" 123 [root@node2 scprits]# echo -ne "123\n" 123
date相关 时间同步
请给出如下格式的 date 命令 例:19-12-02。在给出实现按周输出 比如:周六输出为 6,请分别给出命令。
%F 与 %Y-%m-%d 相同
[root@node2 scprits]# date +%F 2019-12-02 [root@node2 scprits]# date +%Y-%m-%d 2019-12-02
时间
%H:%M:%S 与 %T相同
[root@node2 scprits]# date +%T 15:52:42 [root@node2 scprits]# date +%H:%M:%S 15:52:50
时间和周数
%w 表示周
[root@node2 scprits]# date +%F_%w 2019-12-02_1
手动设置系统日期
[root@node2 scprits]# date -s "20191202 15:55:00" 2019年 12月 02日 星期一 15:55:00 CST
自动同步系统时间
[root@node2 scprits]# ntpdate ntp1.aliyun.com 2 Dec 15:53:46 ntpdate[5099]: step time server 120.25.115.20 offset -112.993154 sec
环境变量问题
当从root用户切到普通用户时,执行ifconfig会提示。
-bash: command not found.
运行目录的过程
先去PATH找
找到 运行命令解释器 shell
找不到 提示 command not found
永久修改 PATH
PATH 内容放到/etc/profile 文件最后
soucre /etc/profile 让它生效
打印三天前的日期格式
-d "-3day" 表示三天前
-d "3day" 表示三天后
[root@node2 scprits]# date +%F 2019-12-02 [root@node2 scprits]# date -d "-3day" +%F 2019-11-29 [root@node2 scprits]# date -d "3day" +%F 2019-12-05
已知test.txt 文件内容为:
[root@node2 scprits]# cat test.txt clsn xizi xiaochao
请问如何把文件中的空格过滤掉。
方法一 grep
[root@node2 scprits]# grep -v "^$" test.txt clsn xizi xiaochao -v 排除 ^$ (空行)
方法二 awk
[root@node2 scprits]# awk '!/^$/' test.txt clsn xizi xiaochao '!/^$/' 排除空行
方法三 sed
[root@node2 scprits]# sed '/^$/d' test.txt clsn xizi xiaochao '/^$/d' 排除空行
sed与awk
awk '找谁{干啥}' sed '找谁干啥'
请使用 grep或 egrep 正则匹配的方式过滤文件test.txt出前两行内容
+ 表示前一个字符出现一次或一次以上。
[root@node2 scprits]# cat test.txt clsn clssssn test
[root@node2 scprits]# egrep "c+l+s+n" test.txt clsn clssssn
排除以t开头的
[root@node2 scprits]# grep -iv "^t" test.txt
clsn
clssssn
排除以t结尾的
[root@node2 scprits]# grep -v "t$" test.txt clsn clssssn
请描述下列路径的内容是做什么的?
/var/log/messages 系统普通日志 /var/log/secure 用户登陆日志 /etc/fstab 开机自动挂载 /etc/profile 配置别名 环境变量 /etc/spool/cron/root 定时任务