linux中的文件处理grep、sed、awk

1.grep

grep [options] pattern [file…]
options:表示选项
pattern:要匹配的模式。
file:表示一系列的文件名
选项:
-c 只输出匹配行的计数
-i 不区分大小写(用于单字符)
-n 显示匹配的行号
-v 不显示不包含匹配文本的所以有行
-s 不显示错误信息
-E 使用扩展正则表达式
grep -c 关键字 文件名 ##显示出现的关键字的行数
grep -n 关键字 文件名 ##显示该关键字的行
grep -n2 关键字 文件名 ##显示该关键字行的上下各两行
grep -A2 关键字 文件名 ##显示后两行
grep -B2 关键字 文件名 ##显示前两行



扩展的(Extend)正则表达式(注意要使用扩展的正则表达式要加-E选项,或者直接使用egrep):
匹配字符:这部分和基本正则表达式一样

  • 字符出现 [0-任意次 ]
    \? 字符出现 [ 0-1次 ]
    + 字符出现 [ 1-任意次]
    {n} 字符出现 [ n次 ]
    {m,n} 字符出现 [ 最少出现m次,最多出现n次]
    {0,n} 字符出现 [ 0-n次]
    {m,} 字符出现 [ 至少m次]
    (xy){n}xy 关键字出现[n次]
    .* 关键字之间匹配任意字
    3.grep中的正则表达式
    ^hello ##以hello开头
    hello$ ##以hello结尾
    ‘h....o‘ ##‘h开头,o结尾,中间4个字符‘
    ‘h.....‘ ##‘h开头,后面5个字符‘
    ‘.....o‘ ##‘o结尾,前面5个字符‘
  1. sed
    stream editor:用来操作的纯ASC||码的文本,处理时把当前行存入临时缓冲区,成为模式空间,可以指定仅仅处理哪些行,sed符合条件的处理。不符合条件的不处理。
    sed命令格式:
    sed [options] ‘command‘ files
    sed [options] -f scriptfile files ##用指定文件做sed命令

sed对字符处理:
p 显示
d 删除
a 添加
c 替换
w 写入
i 插入

p模式操作:
sed -n ‘/#/p‘ fstab 显示有#行的内容
sed -n ‘/#/!p‘ fstab 除了#的行都显示
sed -n ‘/^#/!p‘ fstab 除了#开头的行都显示
sed -n ‘/^#/p‘ fstab 显示#开头的行
sed -n ‘/#$/p‘ fstab 显示#结尾的行
sed -n ‘/^UUID/p‘ fstab 显示UUID开头的行
sed -n ‘/^UUID/!p‘ fstab 除了UUID开头的行都显示
sed -n ‘2,6p‘ fstab 显示第2行到第6行的内容
sed ‘2,6!p‘ fstab 除了2-6行都显示
d模式操作:
sed ‘/^UUID/d‘ fstab 除UUID开头的行的内容
sed ‘/^UUID/!d‘ fstab 删除除UUID开头外的行的内容
sed ‘/^$/d‘ fstab 删除空行
sed ‘3,8d‘ fstab ##删除3-8行,不显示,但文件本身并无变化
a模式操作:
sed ‘/^UUID/a\hello sed\n westos‘ fstab ##在UUID的最后一行中加入hello sed 换行 westos
c模式操作:
sed ‘/^UUID/c\hello‘ fstab ##将UUID开头的内容换为hello
i模式操作:
sed ‘/^UUID/i\hello sed\n westos‘ fstab ##将UUID开头的内容之前加入hello sed 换行 westos
w模式操作:
sed ‘/^#/w /mnt/testfile‘ fstab ##将fstab中以#为开头的行整合到/mnt/testfile中
sed -n ‘/^#/w /mnt/testfile‘ fstab ##不显示
sed ‘6r/mnt/linux‘ fstab ##将/mnt/linux中的所有内容整合到fstab的第六行中
c模式操作 :
sed ‘/^#/chello\nlinux‘ fstab ##将#开头的行的内容用‘hello\nlinux’替换

sed的其他用法:
sed ‘G‘ passwd ##每打印一行同时打印空行
sed ‘$!G‘ passwd ##最后一行不随后打印空行
sed ‘=‘ passwd ##打印每一行之前先打印行号,第二行打印内容
sed ‘=‘ passwd |sed ‘N;s/\n/ /‘ ##将换行换成空格
sed -n ‘$p‘ data ##显示最后一行

awk

awk ‘{print NR}‘ passwd ##打印每行行号
awk -F : ‘{print NF}‘ passwd ##打印每行有几列
awk -F : ‘{print $1,$2}‘ passwd ##打印第1列与第二列,空格连接
awk -F : ‘{print $1":"$2}‘ passwd ##打印第1列与第2列,二者用:连接
awk -F : ‘BEGIN{print "name passwd"}{print $1":"$2}END{print "end"}‘ passwd
##第一行前加入字符name passwd 最后一行字符加入end
awk -F : ‘BEGIN{print "name passwd"}/bash$/{print $1":"$2}END{print "end"}‘ passwd ##结果是以bash结尾的行
awk -F : ‘BEGIN{n=0}/bash$/{n++}END{print n}‘ passwd ##对以bash结尾的行进行计数
awk -F : ‘BEGIN{n=0}{n++}END{print n}‘ passwd ##对passwd有几行进行计数
使用一条命令抓取ifconfig返回的ip:
ifconfig ens33|awk ‘/inet\>/{print $2}‘
先使用awk ‘/inet‘ 抓取以inet开头的一行,然后打印其中的第二列

原文地址:https://blog.51cto.com/12893781/2394630

时间: 2024-08-27 15:14:49

linux中的文件处理grep、sed、awk的相关文章

LINUX 下 find grep sed awk 的常见基本用法特点

LINUX 下 find grep sed awk 的常见基本用法特点 只为让自己具有更高的水准,这就开始了长达6个月的小白进阶路! 这几天学习linux基础命令有点犯蒙,尤其是对文件查找这块.所有我想把一些我觉得常用的实用的参数项总结下来,大神勿喷哈... 不到之处请大家指教,小女子在此谢过了. 一.find:命令用于查找文件系统中指定的文件,其命令格式为: 1.find pathname -options [ -print  -exec  -ok ... ] (1)find 命令的参数: p

Linux三剑客grep/sed/awk

grep/sed/awk被称为linux的“三剑客” grep更适合单纯的查找或匹配文本: sed更适合编辑匹配到的文本: awk更适合格式化文本,对文本进行较复杂各式处理: Grep --color=auto 或者 --color:表示对匹配到的文本着色显示 -i:在搜索的时候忽略大小写 -n:显示结果所在行号 -c:统计匹配到的行数,注意,是匹配到的总行数,不是匹配到的次数 -o:只显示符合条件的字符串,但是不整行显示,每个符合条件的字符串单独显示一行 -v:输出不带关键字的行(反向查询,反

grep,sed,awk与简单正则表达式应用

grep,sed,awk与简单正则表达式应用 这里使用的测试文件是linux /etc/passwd文件,最好是复制一份进行练习,方式对文件内容造成损坏.感觉还是要多练习才能很好的使用,习题这里就不贴了,网上一找一大把. grep:   -o 用作计算出现多少次字段  -c 打印符合要求的行数  -n 在输出符合要求的行的同时也打印行号  -v 打印不符合要求的行  -A 后跟一个数字 ps -A2表示打印符合要求的行及下面两行  -B 后跟一个数字 ps -B2表示打印符合要求的行及上面两行 

Linux中一个文件10行内容,如何输出5-8内容到屏幕

题目是这样的,Linux中一个文件10行内容,如何输出5-8内容到屏幕首先我们模拟一下这样的环境: [root@localhost question]# pwd /root/question [root@localhost question]# seq 1 10 > q.txt [root@localhost question]# cat q.txt 1 2 3 4 5 6 7 8 9 10 我们的任务是取5-8行输出: 第一种方法: [root@localhost question]# sed

linux中Makefile文件相关内容

第一章.概述什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional(专业)的程序员,makefile还是要懂.这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义.特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力.因为,makefile关系到了整个

Linux中删除文件,磁盘空间未释放问题追踪

在客户使用我们产品后,发现一个问题:在删除了文件后,磁盘空间却没有释放.是有进程在打开这个文件,还是其他情况?我们一起来看看一下两个场景 一. 场景一:进程打开此文件 当一个文件正在被一个进程使用时,用户删除此文件,文件只会从目录结构中删除,但并没有从磁盘删除.当使用这个文件的进程结束后,文件才会真正的从磁盘删除,释放占有的空间. 我们发现剩余磁盘空间比较少时,回去删除一些大的临时文件或者log文件,如果删除之后会发现磁盘空间并未减少,那么可以通过"lsof"命令去查看正在使用该文件的

5 个在 Linux 中管理文件类型和系统时间的有用命令

对于想学习 Linux 的初学者来说要适应使用命令行或者终端可能非常困难.由于终端比图形用户界面程序更能帮助用户控制 Linux 系统,我们必须习惯在终端中运行命令.因此为了有效记忆 Linux 不同的命令,你应该每天使用终端并明白怎样将命令和不同选项以及参数一同使用. 在 Linux 中管理文件类型和设置时间 请先查看我们 Linux 小技巧系列之前的文章: 5 个有趣的 Linux 命令行技巧 给新手的 10 个有用 Linux 命令行技巧 在这篇文章中,我们打算看看终端中 5 个和文件以及

【翻译自mos文章】在unix/linux中使用文件描述符(File Descriptors)来找回被删掉的文件(数据文件or redo log)

在unix/linux中使用文件描述符(File Descriptors)来找回被删掉的文件(数据文件or redo log) 参考原文: Retrieve deleted files on Unix / Linux using File Descriptors (Doc ID 444749.1) 适用于: Oracle Database - Enterprise Edition - Version 8.1.7.0 to 11.2.0.3 [Release 8.1.7 to 11.2] Linu

[CentOS 7系列]grep/sed/awk实战

最近准备和CoreSite - Any2 California接入商建立网络BGP邻居关系.从peeringdb (https://www.peeringdb.com/ix/142)上找到了所有接入商的信息,但是转移信息到本地不是很方便,需要进行多次文本调整,耗时较长.作为萌新,立马就想到近期学习的grep/sed/awk工具.于是就尝试处理数据. 1.下载页面内容 curl https://www.peeringdb.com/ix/142 > peering 将页面内容存入peering文件