shell面试题整理

1.给一个放有IP的文件,其中一个IP一行,统计哪个IP出现的次数最多。

ip_input.txt内容如下:

219.217.49.14

175.43.4.87

87.48.98.1

59.73.38.25

219.217.50.14

59.92.48.32

219.217.49.14

59.72.38.142

59.73.38.25

219.217.49.14

用shell脚本实现如下:

sort ip_input.txt | uniq -c | sort | tail -1 | awk ‘{print $2}’

命令拆解结果如下:

sort ip_input.txt:      sort ip_input.txt:|uniq -c
175.43.4.87              1 175.43.4.87
219.217.49.14            3 219.217.49.14
219.217.49.14            1 219.217.50.14
219.217.49.14            1 59.72.38.142
219.217.50.14            2 59.73.38.25
59.72.38.142             1 59.92.48.32
59.73.38.25              1 59.92.48.32
59.73.38.25
59.92.48.32
87.48.98.1

解析:在uniq -c(要加上-c,否则不会显示重复了多少次)之前要先排序,因为uniq是对连续的行进行检查。最后要注意的是awk 要用单引号,因为如果用双引号就会把$2解析掉为运行程序的第二个参数,用单引号就是原汁原味的awk用法,表示记录的第二个字段。

2.打印出sshd服务的端口号和进程号

首先观察netstat -anp| grep sshd的结果

命令如下:root用户

netstat -anp | grep sshd | sed -n ‘s/.*:::\([0-9]*\) .* \([0-9]*\)\/sshd/\1 \2/p’  

需要对第4行进行获取解析,取出端口22和进程号7572

利用sed命令的替换功能,格式如下:

s/pattern/replacemen/flag

其中pattern为我们要替换的文本,使用正则表达式表示的匹配模式,

replacement为用来替换的由一般字符组成的字符串。

flag为替换标志,为p时,替换第1个符合规则的字符串,并且将缓冲区输出到标准输出,g为全局匹配,会替换文本行中所有符合规则的字符串,但没有将缓冲区输出到标准输出。

由题意可知,我们可以把22和7572提取出来,然后替换掉第4行,所以打印第4行时只会打印22和7572.因为sed是一行一行读地,所以其它行并不会输出,因为它们没有匹配。

sed -n ‘s/.*:::\([0-9]*\) .* \([0-9]*\)\/sshd/\1 \2/p’

其中-n把默认输出给禁止了,sed默认是输出所有文本地,主要说下正则表达式,这里在:::前面加上.*是为了把前面tcp 0 0 给包括进来到pattern这个正则表达式内,然后在\([0-9]*\)后面要加上一个空格后再加.*,才能把整个22做为一个整体后面用/1来引用,如果没有.*,则后面引用/1时会变为空。所以这里在用.*的时候,前一个字符要加上去,这里的前一个字符是空格符。\(这里的\是为了转义,

后面的\1 \2在这里表示22 7572

3.统计文本中出现某个单词的次数

文件为ip_input.txt,这个文件是在之前的ip_input.txt的基础上添加多了一些字母,为了大写字母混用,加上符号,所以特意添加地,字符‘4’有18个

219.217.49.14

175.43.4.87

87.48.98.1

59.73.38.25

219.217.50.14

59.92.48.32

219.217.49.14 DF,SDF4SD,SDFad4sdf

59.72.38.142

59.73.38.25  dsaf4asdf as4e

219.217.49.14 219.217.49.14219.217.49.14 219.217.49.14

命令如下:

cat ip_input.txt | tr -c “[:alnum:]” “\n” | grep -c 4

思路如下:

因为grep的-c选项只有统计某个单词出现的行数,所以必须把每个单词放一行,这就需要用到替换命令tr,利用tr把除了字母和数字之外的其它字符都用\n,即换行符替代。

tr命令语法如下:

tr [option]  set1 [set2]

option选项如下所列:

-c:用字符集set2替换字符集set1中没有包含的字符。这里set1我们用[:alnum:],[:alnum:]表示所有字母字符与数字。 set2是\n。

-d:删除字符集set1中重复的字符,不执行操作。

-s: 压缩set1中重复的字符,去重。

-t:将字符集set1用set2转换。

扩展:如果是统计字符出现的次数,则需改为

more tt.txt|tr -sc [:alnum:] ‘\n’|sed ‘s/value/value\n/g’|grep -c value

注意:如果想把它封装成一个.sh文件,如my.sh则需

more $2|tr -sc [:alnum:] ‘\n’|sed “s/$1/$1\n/g”|grep -c $1,

直接./mysh value tt.txt,结果为7

注意:sed中要用双引号才行,如果用单引号,则$1就不是指value,因为在单引号里用的sed命令的规则,而不是shell的规则。

[[email protected] my]# more tt.txt 
valuevaluevalue
value
valueasf
value

时间: 2024-10-17 01:13:22

shell面试题整理的相关文章

经典shell面试题整理

一.取出/etc/passwd文件中shell出现的次数 问题:下面是一个/etc/passwd文件的部分内容.题目要求取出shell并统计次数,shell是指后面的/bin/bash,/sbin/nologin等,如下面/bin/bash出现12次,/sbin/nologin出现3次. hyn:x:525:500::/home/hyn:/bin/bash ljlxx:x:526:500::/home/ljlxx:/bin/bash lzj:x:527:500::/home/lzj:/bin/b

小鹿·试题整理

1)在RHEL5系统中,以下命令(C)可用来查看系统的路由表信息 A) ip add list B) show ip route C) route -n D) route --print 补充:查看网络接口信息 ifconfig 查看网络连接情况 netstat 跟踪数据包       traceroute 目标主机地址 域名解析         nslookup 目标主机地址 2)在Linux系统日志消息中,重要性最低的是(C)级别,表示正常的程序或系统调试信息. A)EMERG B) WAR

2017最新企业Shell面试题及企业运维实战共30道案例

<跟老男孩学习Linux运维:Shell高级编程实战>一书第19章企业面试题分享. 答案: 1.答案在<跟老男孩学习Linux运维:Shell高级编程实战>第19章一书2016年年底前即将出版. 2.2016最新Shell视频http://edu.51cto.com/pack/view/id-546.html 第19章企业Shell面试题及企业运维实战案例 19.1 企业Shell面试题实战案例 19.1.1 企业Shell面试题1:批量生成随机字符文件名案例 使用for循环在/o

那些年我们一起做过的shell面试题(一)

企业真实shell面试题,一起来挑战把! 声明:如有雷同,纯属抄袭 1.开发一个守护进程脚本,每30秒执行一次,检查mysql主从同步 [[email protected] scripts]# cat check_mysql_slave_status.sh #!/bin/bash# date 2016-1-5# author tom# mail [email protected]# function check_mysql_slave_status# version 4.1.2 ####do i

Touch事件or手机卫士面试题整理回答(二)

Touch事件or手机卫士面试题整理回答(二) 自定义控件 1. Touch事件的传递机制 顶级View->父View->子View,不处理逆向返回 OnInterceptTouchEvent(),返回值控制Touch是否向下传递. true中断事件,false不中断事件. onTouchEvent() 返回值决定否处理事件.True消耗事件,False不处理事件向上传递. 2. 轮播动画的实现原理 ViewPage和TextView组合实现图片和标题的效果 ViewPage设置setOnPa

海量数据面试题整理1.给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是

海量数据面试题整理 1. 给定a.b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a.b文件共同的url? 方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G.所以不可能将其完全加载到内存中处理.考虑采取分而治之的方法. s 遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(记为)中.这样每个小文件的大约为300M. s 遍历文件b,采取和a相同的方式将url分别存储到1000各小文件(记为).这样

shell日常使用整理

基本常识 1.变量命名规则: 首字符必须为字母 中间不能有空格,可以有下划线_ 不能使用标点符号 不能使用bash里的关键字 2.变量赋值: 变量名=值, (注意,= 两边不能有空格) var=1var=$var+1 echo $var+1输出为1+1,而不是2 可以用如下方法使其输出为2let "var+=1"#var=$[$var+1]#var=$(($var+1)) echo $var 或者var=1var= expr $var + 1 #(注意,+ 两边的空格,一定要有) le

Java笔试面试题整理第一波

(本系列同步更新于 个人博客小站) 本系列整理Java相关的笔试面试知识点.其它几篇文章例如以下: Java笔试面试题整理第八波 Java笔试面试题整理第七波 Java笔试面试题整理第六波 Java笔试面试题整理第五波 Java笔试面试题整理第四波 Java笔试面试题整理第三波 Java笔试面试题整理第二波 Java笔试面试题整理第一波 1.Java变量 Java中主要有例如以下几种类型的变量 局部变量 类变量(静态变量)-- 属于类 成员变量(非静态变量)-- 属于对象 2.关于枚举 pack

web前端面试题整理(HTML篇)

web前端面试题整理(HTML篇)需要web前端课程工具和电子书,可以加: 33群105601600;  22群1203428331. h5的改进:新元素画布canvas: HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成音频audio视频video语义性: article,  nav ,  footer, section, aside, hgroup等.时间time 新属性拖放: draggable   <img draggable=&q