grep文本过滤工具

grep命令是Linux系统中最重要的命令之一,功能是从文本文件管道数据流中筛选匹配的数据,如果再配合正则表达式,功能十分强大,是Linux运维人员必备的命令

语法:

grep [options] [pattern]  [file]

命令  参数   匹配模式   文件数据

grep命令里的匹配模式就是你想要找的东西,可以是普通的文字符号,也可以是正则表达式

参数选项 解释说明
-v 排除匹配结果
-n 显示匹配行与行号
-i 不区分大小写
-c 只统计匹配的行数
-E 使用egrep命令
--color=auto 为grep过滤结果添加颜色
-w 只匹配过滤的单词
-o 只输出匹配的内容

案例

cat /etc/passwd > /tmp/test_grep.txt

grep  "login" /tmp/test_grep.txt  -n				#找出login有关行
grep "login" /tmp/test_grep.txt -n -v #找出没有login的行
grep "ROOT" /tmp/test_grep.txt -i #忽略大小写,找出root有关行
grep -E "root|sync" /tmp/test_grep.txt --color=auto #同时过滤出root和sync有关行
grep "login" /tmp/test_grep.txt -c #统计匹配结果的行数
grep "login" /tmp/test_grep.txt -n -o #只输出匹配出的内容 grep "oldboy" /tmp/test_grep.txt -w #完整匹配,字符串精确匹配,整个单词
grep -E "^#|^$" /tmp/test_grep.txt #过滤掉空白和注释行

sed字符流编辑器

注意sed和awk使用单引号,双引号有特殊解释

sed是Stream Editor(字符流编辑器)的缩写,简称流编辑器。

sed是操作、过滤和转换文本内容的强大工具。常用功能包括对文件实现快速增删改查,其中查询的功能中最常用的两大功能是过滤(过滤指定字符串)、取行(取出指定行)。

语法:

sed [选项] [sed内置命令字符] [输入文件]

选项:

参数选项 解释
-n 取消默认sed的输出,常与sed内置命令p一起用
-i 直接将修改结果写入文件,不用-i,sed修改的是内存数据

sed的内置命令字符用于对文件进行不同的操作功能,如对文件增删改查

sed常用内置命令字符

sed的内置命令字符 解释
a append,对文本追加,在指定行后面添加一行/多行文本
d Delete,删除匹配行
i insert,表示插入文本,在指定行前添加一行/多行文本
p Print ,打印匹配行的内容,通常p与-n一起用
s/正则/替换内容/g 匹配正则内容,然后替换内容(支持正则),结尾g代表全局匹配

案例:

[root@pylinux tmp]# cat student.txt
1,oldboy,100
2,alex,99
3,wupeiqi,80
4,yuchao,60 #不加-i参数,以下命令都不会写入如文件,仅修改内存数据
sed 'a heiheihei' student.txt #匹配每一行,在下一行添加heiheihei
sed '2a heiheihei' student.txt #在第二行下面,添加heiheihei
sed '3d' student.txt #删除第三行
sed '2i haha' student.txt #在第二行上面,添加haha
sed '2a heiha\ndadada' student.txt #在第二行下面,添加多行数据
sed '1,2d' student.txt #删除1和2行
sed 's/wupeiqi/WUPEIQI/g' student.txt #吧wupeiqi换成WUPEIQI
sed 's#wupeiqi#WUPEIQI#g' student.txt #效果同上
sed '2p' student.txt -n #打印第二行的内容,sed默认显示所有结果,-n不显示默认输出
sed '1,3p' student.txt -n #显示1到3行的内容
sed '11,$d' student.txt #删除11行一直到文件结尾

awk基础入门

awk是Linux实际工作中最重要的强大工具.

awk不仅是Linux系统一个命令,也是种编程语言,可以处理数据/文件生成Excel。

语法:

awk [option] 'pattern{action}' file ..
命令 参数 '条件{动作}' 文件..

参数:

参数 解释
-F 指定字段分割
-v 定义或修改awk内部变量

案例:

  • awk的条件 NR表示行号,NR==5表示第五行
  • awk后面内容请使用单引号,双引号有特殊解析
awk 'NR==2,NR==5' test_grep.txt			#显示第2到5行之间的内容

awk '{print NR,$0}' test_grep.txt		#给所有内容加上行号,如同实现cat -n
解释:NR 表示行号,$0表示一整行的内容,print是awk的命令,打印出结果,{print NR,$0}是awk固定语法
awk 'NR==2||NR==6 {print NR,$0}' test_grep.txt		#显示文本的第二行和第六行
awk 'NR==2,NR==6 {print NR,$0}' test_grep.txt #显示文本的第二行到第六行

awk -F ":" '{print NR,$1,$3,$NF}' test_grep.txt
解释:-F 指定分隔符,以冒号分割
'{print NR,$1,$3,$NF}' 打印出NR行号,$1第一列 $3第三列 $NF最后一列,注意$0表示整行
  • awk的替换查找函数,gsub()
awk '{gsub("bin","BIN",$0);print $0}' test_grep.txt
解释:gsub("想替换的内容","替换后的内容",在一整行都替换;显示替换后的整行结果)
  • 取出网卡的ip地址,注意每台机器的信息不一样
方法一:[root@pylinux tmp]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.141.32.137 netmask 255.255.192.0 broadcast 10.141.63.255
ether 52:54:00:4f:ab:36 txqueuelen 1000 (Ethernet)
RX packets 32262057 bytes 4978629753 (4.6 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 38885574 bytes 7916319323 (7.3 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ifconfig eth0| awk -F "inet|netmask" 'NR==2 {print $2}'
解释:因为这里信息左右两边是inet和netmask,因此以它俩分割
显示第二行的结果,第二列的信息 方法二:
[root@pylinux tmp]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:4f:ab:36 brd ff:ff:ff:ff:ff:ff
inet 10.141.32.137/18 brd 10.141.63.255 scope global eth0
valid_lft forever preferred_lft forever ip addr show eth0 |awk -F "inet|/18" 'NR==3 {print $2}'
解释:同理 方法三:用不同的分隔符处理
ifconfig eth0|awk -F " " 'NR==2 {print $2}'
  • 搜狐面试题

处理如下文件内容,将域名取出且根据域名计数排序

https://www.baidu.com/index.html
https://sohu.com/index.html
https://sports.sohu.com/index.html
https://sports.sohu.com/index2.html
https://sports.sohu.com/index3.html
http://it.sohu.com/index.html
http://it.sohu.com/index2.html

解法:

awk -F "/" '{print $3}' test_html.txt |sort|uniq -c

Linux三剑客入门的更多相关文章

  1. Linux实战教学笔记18:linux三剑客之awk精讲

    Linux三剑客之awk精讲(基础与进阶) 标签(空格分隔): Linux实战教学笔记-陈思齐 快捷跳转目录: * 第1章:awk基础入门 * 1.1:awk简介 * 1.2:学完awk你可以掌握: ...

  2. (转)不看绝对后悔的Linux三剑客之awk实战精讲

    原文:http://blog.51cto.com/hujiangtao/1923930 一.Linux三剑客之awk命令精讲 第1章 awk基础入门 1.1 awk简介 awk不仅仅时linux系统中 ...

  3. Linux 三剑客之 awk 实战详解教程

    我们知道 Linux 三剑客,它们分别是:grep.sed.awk.在前边已经讲过 grep 和 sed,没看过的同学可以直接点击阅读,今天要分享的是更为强大的 awk. sed 可以实现非交互式的字 ...

  4. IT技术学习指导之Linux系统入门的4个阶段(纯干货带图)

    IT技术学习指导之Linux系统入门的4个阶段(纯干货带图) 全世界60%的人都在使用Linux.几乎没有人没有受到Linux系统的"恩惠",我们享受的大量服务(包括网页服务.聊天 ...

  5. Linux 基础入门(新版)”实验报告一~十二

    实验报告 日期: 2015年9月15日 一.实验的目的与要求 熟练地使用 Linux,本实验介绍 Linux 基本操作,shell 环境下的常用命令. 二.主要内容 1.Linux 基础入门& ...

  6. Linux基础入门学习笔记20135227黄晓妍

    学习计时:共24小时 读书:1小时 代码:8小时 作业:3小时 博客:12小时 一.学习目标 1. 能够独立安装Linux操作系统   2. 能够熟练使用Linux系统的基本命令   3. 熟练使用L ...

  7. Linux 基础入门 第二周9.21~9.27

    一.学习内容 本周主要学习内容主要贴合: 在进行<深入理解计算机系统>这门课的实验中没有遇到什么大问题,学习内容与上周实验<linux基础入门>有相似之处.本实验中的内容比较贴 ...

  8. 【转载】茶叶蛋干货!《超容易的Linux系统管理入门书》(连载十)进行动态主机配置DHCP

    使用动态主机配置协议DHCP(Dynamic Host Configuration Protocol)则可以避免网络参数变化后一些繁琐的配置,客户端可以从DHCP服务端检索相关信息并完成相关网络配置, ...

  9. 【转载】绝对干货!Linux小白最佳实践:《超容易的Linux系统管理入门书》(连载九)如何通过源代码安装软件

    除了使用Linux的包管理机制进行软件的安装.更新和卸载,从源代码进行软件的安装也是非常常见的,开源软件提供了源代码包,开发者可以方便的通过源代码进行安装.从源码安装软件一般经过软件配置.编译软件.执 ...

随机推荐

  1. ubuntu删除文件和文件夹的rm命令

    在Ubuntu中好多文件或文件夹是不能使用右键删除的,因此知道删除文件或文件夹的rm命令显得尤为重要. rm命令的语法 rm [选项] 文件名或文件夹名 rm命令的一些选项 -f.--force 强力 ...

  2. Codekicker.BBCode(BBCode 和 HTML 互转的插件)介绍

    项目地址:http://bbcode.codeplex.com/ 项目介绍: Codekicker.BBCode is a stable and performant BBCode-Parser fo ...

  3. 原创的离线版 Redis 教程,给力!

    嗯,你没看错,松哥又给大家送干货来了.这次是可以离线阅读的 PDF 版教程哦. 之前一直有小伙伴问我有没有 Redis 的电子书,老实说,有是有,但是公开给大家分享,其实有一点点风险,毕竟这都是有版权 ...

  4. ASP.NET Core Web 项目文件

    在本节中,我们将探索并了解 asp.net core 项目文件. 我们使用 C#作为编程语言,因此项目文件具有.csproj 扩展名. 如果您使用过以前版本的 ASP.NET,那么您可能对此文件非常熟 ...

  5. python 提取整个 HTML 节点

    有的时候,需要把整个 HTML 节点原封不动地取下来,也就是包括节点标签.节点内容,甚至也包括内容中的空格.各种特殊符号等等. 假设已获取到页面源码,并将其保存在变量 src 中.则可有代码如下: f ...

  6. Python - 面向对象 - 第二十天

    Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过 ...

  7. 【maven】搭建maven私服--基于CentOS7.6+docker

    一.docker环境 Docker version 19.03.5, build 633a0ea 二.安装并启动 Maven 私服的工具: Sonatype Nexus 1.搜索 2.下载镜像 doc ...

  8. AD读取Excel新建客户邮箱的测试环境部署有感

    现有AD的账户操作所有服务几乎用WebApi方式,此 方法是便于搭建和部署,做到了前后端的分离 ,其中验证Exchange邮箱转发模块时发现foxmail的exchange本地邮箱配置极其简单,以此记 ...

  9. ROW_NUMBER()实现分页

    1. 在数据表基础上面添加一个自增的一列记录行数(虚拟的实际数据库不存在,不会影响数据库结构)的列当然也顺便起一个别名(我这里起了一个rowNum) 2.由于rowNum是一个虚拟的.若直接使用会报' ...

  10. 一文带你了解JavaScript函数式编程

    摘要: 函数式编程入门. 作者:浪里行舟 Fundebug经授权转载,版权归原作者所有. 前言 函数式编程在前端已经成为了一个非常热门的话题.在最近几年里,我们看到非常多的应用程序代码库里大量使用着函 ...