文本处理工具-习题

1 、找出ifconfig 命令结果中本机的所有IPv4地址

[root@centos7 ~]# ifconfig |head -2 |tail-1 |cut -dn -f2 |cut -d" " -f2

2 、查出分区空间使用率的最大百分比值

[root@centos7 ~]# df |cut -c44-46 |sort -n|tail -2 |head -1

3 、查出用户UID 最大值的用户名、UID 及shell 类型

[root@centos7 ~]# cat /etc/passwd |sort -t:-k 3 -n |tail -1 |cut -d: -f1,3,7

4 、查出/tmp 的权限,以数字方式显示

[root@centos7 ~]# stat /tmp |head -4 |tail-1 |cut -d/ -f1 |cut -d\( -f2

5 、统计当前连接本机的每个远程主机IP 的连接数,并按从大到小排序

# netstat -tn |cut -d: -f2|tr -s ' ' |cut -d" " -f2 |sort -n |uniq -c

 

1 、显示/proc/meminfo 文件中以大小s 开头的行;( 要求:使用两种方式)

[root@centos7 ~]# grep -e ^s -e ^S/proc/meminfo

[root@centos7 ~]# grep "^[sS]"/proc/meminfo

2 、显示/etc/passwd 文件中不以/bin/bash结尾的行

[root@centos7 ~]# grep -v"/bin/bash$" /etc/passwd

3 、显示用户rpc 默认的shell程序

[root@centos7 ~]# grep"^rpc\>" /etc/passwd |cut -d: -f7

4 、找出/etc/passwd 中的两位或三位数

[root@centos7 ~]# grep"\<[[:digit:]]\{2,3\}\>" /etc/passwd

5 、显示/etc/grub2.cfg 文件中,至少以一个空白字符开头的且后面跟非空白字符的行

[root@centos7 ~]# grep"^[[:space:]]\+[^[:space:]].*" /etc/grub2.cfg

6 、找出"netstat-tan" 命令的结果中以'LISTEN' 后跟多于0个空白字符结尾的行

[root@centos7 ~]# netstat -tan |grep "\<LISTEN[[:space:]]\+$"

7 、添加用户bash 、testbash 、basher 以及nologin( 其shell为 为/sbin/nologin), 而后找出/etc/passwd文件中用户名同shell名的行

[root@centos7 ~]# grep "^\(\<.*\>\).*\1$" /etc/passwd

[root@centos7 ~]# grep "^\([[:alnum:]]\{1,\}\):.*\1$" /etc/pa

[root@centos7 ~]# grep "^\(.*\):.*\1$" /etc/passwdsswd,必须把模式锚定称为单词

且后两者中的:本身就是一个:号字符,结合/etc/passwd中的:号界定了用户名

 

1 、显示当前系统root 、mage 或wang 用户的UID 和默shell

[root@centos7 ~]# egrep"^(root|mage|wang):" /etc/passwd |cut -d: -f1,3,7

[root@centos7 ~]# egrep"^(root|mage|wang)\>" /etc/passwd |cut -d: -f1,3,7

注意第一条命令中的:号的使用

2 、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行

[root@centos7 ~]# egrep "^[[:alpha:]_]+\(\).*"/etc/rc.d/init.d/functions是正确的

[root@centos7 ~]# grep "^[[:alpha:]_]\+[(][)].*"/etc/rc.d/init.d/functions,中括号也可满足

[root@centos7 ~]# grep "^[[:alpha:]_]\+\(\).*"/etc/rc.d/init.d/functions却是错误的,互为转义

3 、使用egrep 取出/etc/rc.d/init.d/functions中其基名

[root@centos7 ~]# echo "/etc/rc.d/init.d/functions" |egrep -o"[[:alnum:]]+$"

[root@centos7 ~]# echo "/etc/rc.d/init.d/functions" |egrep -o"[^/]+$"

先使用#echo “/etc/rc.d/init.d/functions”把路径转换为文本,然后再作进一步的处理

由于egrep=grep –E,所以grep的选项egrep同于实用

4 、使用egrep取出上面路径的目录名

[root@centos7 ~]# echo"/etc/rc.d/init.d/functions" |egrep -o "^/.*/"

[root@centos7 ~]# echo"/etc/rc.d/init.d/functions" |egrep -o "^.*/"

5 、统计以root 身份登录的每个远程主机IP地址的登录次数(用netstat –tn或者who来查看远程IP)

[root@centos7 ~]# who |egrep -o"\([[:digit:].]+\)" |tr -d '()'|sort -n | uniq -c

6 、利用扩展正则表达式分别表示0-9 、10-99 、100-199、200-249 、250-255

[0-9]、[1-9][0-9]、[1][0-9]{2}、[2][0-4][0-9]、[2][5][0-5]

7 、显示ifconfig 命令结果中所有IPv4 地址

[root@centos7 ~]# ifconfig| egrep  -o  "IP地址正则表达式"

8、用正则表达式表示IP地址(|是或者的意思)

IP地址的长度为32位,分为4段,每段8位,用十进制数字表示,每段数字范围为0~255,段与段之间用英文句点“.”隔开,例如:某台计算机IP地址为10.11.44.100;

分析IP地址的组成特点:250-255、200-249、0-199;
这三种情况可以分开考虑:
1. 250-255:特点:三位数,百位是2,十位是5,个位是0~5,用正则表达式可以写成:25[0-5]
2. 200-249:特点:三位数,百位是2,十位是0~4,个位是0~9,用正则表达式可以写成:2[0-4][0-9]
3. 0-199:这个可以继续分拆,这样写起来更加简单明晰
  3.1. 0-9:特点:一位数,个位是0~9,用正则表达式可以写成:[0-9]
  3.2. 10-99:特点:二位数,十位是1~9,个位是0~9,用正则表达式可以写成:[1-9][0-9]
  3.3.100-199:特点:三位数,百位是1,十位是0~9,个位是0~9,用正则表达式可以写成1[0-9]{2}

[0-9]|[1-9][0-9]|[1][0-9]{2}|[2][0-4][0-9]|[2][5][0-5]

“(([0-9]|[1-9][0-9]|[1][0-9]{2}|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9]|[1-9][0-9]|[1][0-9]{2}|[2][0-4][0-9]|[2][5][0-5])”

其中.号进行了转义

9、用正则表达式表示手机号

“\<1(3|4|5|7|8)[0-9]{9}\>”

10、用正则表达式表示身份证号

“\<((1[1-5])|(2[1-3])|(3[1-7])|(4[1-6])|(5[0-4])|(6[1-5])|(71|81|82))([0-9]){4}(19|20)([0-9]){2}((0[1-9])|(1[0-2]))(0[1-9]|(1[0-9])|(2[0-9])|(3[0-1]))([0-9]){3}([0-9]|X)\>”

11、用正则表达式表示邮箱号

"\<([[:alnum:]]+(-|_)*[[:alnum:]]*)\>@([[:alnum:]]+\.)+[[:alnum:]]+"

 

1 、删除/etc/grub2.cfg文件中所有以空白开头的行行首的空白字符

[root@centos7 ~]# sed -n's/^[[:space:]]\+//p' /etc/grub2.cfg

2 、删除/testdir/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符(sed命令的-n选项是不输出模式空间所有内容的自动打印,脚本命令p是仅打印模式空间中处理改动的内容,但是sed命令本身就默认输出模式空间所有内容的自动打印,所有-n选项和脚本命令的同时使用只会打印模式空间中处理改动的内容)

[root@centos7 testdir]# cat fstab | sed -r -n 's/^#[[:space:]]+//p'

3 、在/etc/fstab每一行行首增加#号

[root@centos7 ~]# sed -n 's/^/#&/p'/etc/fstab

4 、在/etc/fstab文件中不以#开头的行的行首增加#号

[root@centos7 ~]# sed -n 's/^[^#]/#&/p'/etc/fstab

5 、处理/etc/fstab路径, 使用sed命令取出其目录名和基名

取出目录名的两种方法:

[root@centos7 tmp]# echo"/etc/fst/sd/" | sed -r 's#[^/]+/?$##'

[root@centos7 tmp]# echo"/etc/rc.d/init.d/functions" | sed -r 's@^(.*/)([^/]+/?)$@\1@'

取出基名的两种方法:

[root@centos7 tmp]# echo"/etc/rc.d/init.d/functions" |sed -r 's@^(.*/)([^/]+/?)$@\2@'

[root@centos7 ~]# echo"/etc/fstab/" |sed 's/.*\<//'

6 、利用sed取出ifconfig命令中本机的IPv4地址

[root@centos7 ~]# ifconfig |sed -n '2p' |sed 's/^.*inet//'|sed 's/n.*//'

7 、统计centos安装光盘中Package 目录下的所有rpm文件的以.分隔倒数第二个字段的重复次数

# ls/run/media/root/CentOS\ 7\ x86_64/Packages/ |sed -r's@^(.*\.)(.*)\.rpm$@\2@'|sort|uniq –c

# ls/run/media/root/CentOS\ 7\ x86_64/Packages/ |rev|cut -d. -f2|rev|sort|uniq –c

其中第一种方法中.号要进行转义

 

 

 

原创文章,作者:18612763863,如若转载,请注明出处:http://www.178linux.com/31833

赞 (0)
1861276386318612763863
上一篇 2016-08-15 09:24
下一篇 2016-08-15 09:24

相关推荐

  • 程序包管理:rpm、yum以及(make)源代码编译安装

    程序包管理:rpm、yum以及(make)源代码编译安装 在Linux上安装程序一般都有三种方法:源代码编译安装,rpm包安装和rpm包的前端安装yum, (rpm,和yum程序包管理器是针对CentOS6平台的) 程序包管理方式都大同小异:  源代码–>目标二进制格式(二进制程序、库文件、配置文件、帮助文件)–&gt…

    Linux干货 2017-01-10
  • CentOS 7 RPM包方式安装LAMP

    细节要求: (1) 三者分离于两台主机; (2) 一个虚拟主机用于提供phpMyAdmin;另一个虚拟主机用于提供wordpress; (3) 提供xcache加速; (4) 为phpMyAdmin提供https虚拟主机; 一、准备CentOS 7主机环境以及Repo仓库提供基于rpm安装包方式的程序包安装源 安装主机程序包规划: 主机1:web-serve…

    Linux干货 2017-02-16
  • 关于大型网站技术演进的思考(七):存储的瓶颈(7)

    原文出处: 夏天的森林  本文开篇提个问题给大家,关系数据库的瓶颈有哪些?我想有些朋友看到这个问题肯定会说出自己平时开发中碰到了一个跟数据库有关的什么什么问题,然后如何解决的等等,这样的答案没问题,但是却没有代表性,如果出现了一个新的存储瓶颈问题,你在那个场景的处理经验可以套用在这个新问题上吗?这个真的很难说。 其实不管什么样的问题场景最…

    2015-03-11
  • linux磁盘管理补充之挂载选项及常用工具

    一、文件挂载的配置文件         配置文件:/etc/fstab 要挂载的设备的UUID或卷标或/dev/sd[a-z]    挂载点        &n…

    Linux干货 2016-08-30
  • 菜鸟教你如何磁盘分区与创建文件系统以及挂载(1)

    何为磁盘分区,为什么要分区?    计算机中存放信息的主要的存储设备就是硬盘,但是硬盘不能直接使用,必须对硬盘进行分割,分割成的一块一块的硬盘区域就是磁盘分区。在传统的磁盘管理中,将一个硬盘分为两大类分区:主分区和扩展分区。主分区是能够安装操作系统,能够进行计算机启动的分区,这样的分区可以直接格式化,然后安装系统,直接存放文件。 MBR分…

    Linux干货 2016-08-27
  • 初学Linux之标准 I/O 和管道

    前面我们已经了解了文件系统的部分内容,我们可以通过 ls 命令让当前目录下的内容都显示在屏幕上,也可以使用 pwd 命令,显示当前的所在的目录路径。但是我们输入的是命令,本身并没有输入“显示”这类命令和要求,但是系统就自动的在屏幕上输出我们命令指定的信息。由此可以想象到,系统自身有默认的一种输出方式,同时,有输出就有输入,当输入的和系统无关,系统也会自动提示错误,以上就是我们接下来要了解的基础内容——标准 I/O。具体的涉及内容包括:三种 I/O 设备,把 I/O 重定向入文件,tr 命令的使用,使用管道链接命令。

    2017-12-02