1、从AAA.log文件中提取“james”或者“curry”,同时不包含“kobe”的行,然后提取“:”分割的第五个字段。
cat AAA.log|grep -E "james|curry"|grep -v "kobe"|awk -F ":" '{print $5}'
【评析】搜寻"A or B"的方法就是grep -E "A|B"的方法,-E必须写。不包含某某的方法是grep -v。分割有两个方法,一个是cut,一个是awk。注意cut和awk命令参数的不同。
上面的命令用cut写是 cat AAA.log|grep -E "james|curry"|grep -v "kobe"|cut -d : -f 2
2、请用shell查询文件AAA.log里面空格开始的所在行号
grep -n ^$ AAA.log |cut -d : -f 1
【评析】为什么cat -n AAA.log|grep ^$得不到这个效果呢?思考一下
3、Linux如何在shell环境得知远程计算机的运行时间
比较有逼格的方法是这样的:
cat /proc/uptime| awk -F. '{run_days=$1 / 86400;run_hour=($1 % 86400)/3600;run_minute=($1 % 3600)/60;run_second=$1 % 60;printf("系统 已运行:%d天%d时%d分%d秒",run_days,run_hour,run_minute,run_second)}'
【评析】其实linux有很多方法可以查看远程计算机的运行时间,#uptime也可以,#top也可以,#w也可以。而且这三种方法直接显示小时,不像/proc/uptime,用秒显示,还要换算一下。
4、如何查看当前Linux系统状态,如cpu,内存,负载,版本
前三个用top直接就看了,版本用#uname -a
【评析】如果想了解更多服务器的硬件信息。使用 cat /proc/cpuinfo
5、用一条命令查看目前系统已启动服务所监听的端口
netstat -antp|grep LISTEN
【评析】netstat -antl的结果和上面的不一样,diff -y一下,就发现 -antl会有 ESTABLISHED的项。
6、sed将文件test中第50行中的“haiwao”改为“haiwai”
sed -i '50s/haiwao/haiwai/g' test
7、在每个月的第一天备份并压缩/etc目录下面的所以内容,存放在/root/backup目录下,文件名为yymmdd_etc,并且发邮件通知维护工程师,shell程序filebach存放在/usr/bin目录下
先写一个filebach.sh
#vim /usr/bin/filebach.sh #进入脚本编辑界面
Author:管理员名称
E-mail:[email protected] #sh前写好名称和邮件地址是一个好习惯
#!/bin/bash
YY=$(date +%y)
MM=$(date +%m)
DD=$(date +%d)
filename=$YY$MM$DD
tar -zcvf /data/filename 888.log 999.log NBA.txt
echo "今天的文件已经打包保存完毕,请放心"|mutt -s "主人,OK" [email protected]
echo "程序已运行成功"
exit 27
:wq保存完毕之后,#crontab -e
1 0 1 */1 * sh /usr/bin/filebach.sh #在每个月的第一天0点1分的时候启动计划任务
8、用awk命令在NBA.txt文件里不显示4的倍数行
#awk 'NR%4' NBA.txt
【评析】NR表示执行awk命令之后系统读取的数据行数,如果读取多个文件,行数会叠加。
FNR表示执行awk命令之后系统读取的数据行数,如果读取多个文件,行数不会叠加,每个文件都新起头。
如果题目没有写明非要用awk的话,可以使用sed命令,#sed 'n;n;n;d' NBA.txt
9、在NBA.txt文件里匹配式样“JORDAN”的行之后插入一空行
#sed 's/JORDAN/JORDAN \n/g' NBA.txt
【评析】sed中的整行更改的参数是c,匹配单个词的更改是g,shell里的替换用的是gc,注意区别。
10、只保留Fifa.log文件里重复行中的一行,其他都删除
sort Fifa.log|sed '$!N;/\(.*\)\n\1$/!{x;//P;x};h;D' > 新的文件路径
【评析】这道题比较难,一道题考验了sed几乎全面的知识,而且上面的那个语句的前提就是一定要先 sort,把重复的行放在相邻的位置上。
删除重复行就比较简单,sort Fifa.log|uniq > 新的文件路径,或者使用 awk '!a[$0]++' NBA.txt 也能达到一样的效果。