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 - | awk ‘{print $}’

命令拆解结果如下:

sort ip_input.txt:      sort ip_input.txt:|uniq -c
175.43.4.87 175.43.4.87
219.217.49.14 219.217.49.14
219.217.49.14 219.217.50.14
219.217.49.14 59.72.38.142
219.217.50.14 59.73.38.25
59.72.38.142 59.92.48.32
59.73.38.25 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/.*:::\([-]*\) .* \([-]*\)\/sshd/\ \/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的规则。

[root@Master my]# more tt.txt 
valuevaluevalue
value
valueasf
value

程序猿必读

shell面试题整理的更多相关文章

  1. 经典shell面试题整理

    一.取出/etc/passwd文件中shell出现的次数 问题:下面是一个/etc/passwd文件的部分内容.题目要求取出shell并统计次数,shell是指后面的/bin/bash,/sbin/n ...

  2. 【web前端面试题整理06】成都第一弹,邂逅聚美优品

    前言 上周四回了成都,休息了一下下,工作问题还是需要解决的,于是今天去面试了一下,现在面试回来了,我感觉还是可以整理一下心得. 这个面试题整理系列是为了以后前端方面的兄弟面试时候可以得到一点点帮助,因 ...

  3. C++ 面试题整理

    我和朋友们面到的c++试题整理 虚表 static const sizeof 可构造不可继承的类 stl Iterator失效 map vector vector的removed_if 优化 ---- ...

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

    Touch事件or手机卫士面试题整理回答(二) 自定义控件 1. Touch事件的传递机制 顶级View->父View->子View,不处理逆向返回 OnInterceptTouchEve ...

  5. 尚学堂Java面试题整理

    博客分类: 经典分享   1. super()与this()的差别? - 6 -  2. 作用域public,protected,private,以及不写时的差别? - 6 -  3. 编程输出例如以 ...

  6. 【JAVA面试】java面试题整理(4)

    版权声明:转载请注明 https://blog.csdn.net/qq_33591903/article/details/83473779                               ...

  7. 北京Java笔试题整理

    北京Java笔试题整理 1.什么是java虚拟机?为什么ava被称作是"平台无关的编程语言? 答:Java虚拟机可以理解为一个特殊的"操作系统",只是它连接的不是硬件,而 ...

  8. Java笔试面试题整理第八波

    转载至:http://blog.csdn.net/shakespeare001/article/details/51388516 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...

  9. Java笔试面试题整理第六波(修正版)

    转载至:http://blog.csdn.net/shakespeare001/article/details/51330745 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...

随机推荐

  1. E20170804-mk

    epic n. 史诗; 叙事诗; 史诗般的作品; estimate vt. 估计,估算; 评价,评论; 估量,估价; Sprint  vi. 冲刺,全速短跑; n. 全速短跑; 速度或活动的突然爆发; ...

  2. html5中不再支持的元素

    html5中不再支持的元素:1.acronym(建议abbr) : 定义首字母缩写2.applet(建议object): 定义 applet3.basefont(使用css控制)4.big(使用css ...

  3. codevs1557 热浪(堆优化dijkstra)

    1557 热浪  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 德克萨斯纯朴的民眾们这个夏 ...

  4. [App Store Connect帮助]一、 App Store Connect 使用入门(2)登录至 App Store Connect

    请使用您的 Apple ID 登录 App Store Connect.如果您是具有“帐户持有人”职能的用户,请使用您用于加入“Apple 开发者计划”的 Apple ID 登录并添加其他用户至您的 ...

  5. [Swift通天遁地]九、拔剑吧-(3)创建多种自定义Segment分段样式的控件

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  6. StreamingListener技术点

    以下是对StreamingListene的研究,由于比较简单,故只贴代码,不做解释 /** * Created by gabry.wu on 2016/5/27. * 实现StreamingListe ...

  7. Zookeeper概念学习系列之zookeeper的节点

    znode有两种类型:  临时节点(ephemeral  node) 和 持久节点(persistent node). znode的类型在创建时确定并且之后不能再修改. 短暂znode的客户端会话结束 ...

  8. EasyUI系列学习(二)-使用EasyUI

    一.引入必要文件 <!--1.0引入jQuery核心库--> <script src="jquery-easyui-1.4.4/jquery.min.js"> ...

  9. Java Controller下兼容xls和xlsx且可识别合并单元格的excel导入功能

    1.工具类,读取单元格数据的时候,如果当前单元格是合并单元格,会自动读取合并单元格的值 package com.shjh.core.util; import java.io.IOException; ...

  10. Android开发高手课 - 02 崩溃优化(下):应用崩溃了,你应该如何去分析?

    崩溃现场 1. 崩溃信息 进程名.线程名 崩溃类型和堆栈信息 2. 系统信息 Logcat 机型.系统.厂商.CPU.ABI.Linux 版本等 设备状态:是否 root.是否模拟器.是否有 Xpos ...