sed与grep
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sed与grep相关的知识,希望对你有一定的参考价值。
sed与grep文本处理工具是用来查看、分析、统计文本的工具其中最有名有三个,这次先介绍两个sed与grep。这两个有一个共同点那便是都是支持正则表达式与扩展正则表达式。
能够抽取文本的工具有很多
内容抽取:cat、more、less
文件截取:head、tail
按列抽取:cut
排序和统计:sort、wc
按关键字抽取:grep
按行处理:sed
1.sed
sed是一种流编辑器,主要用来自动编写一个或多个软件,对简化对文件的反复操作,编写转换程序等。更多帮助内容请看http://www.gnu.org/software/sed/manual/sed.html
sed命令格式:
sed OPTIONS... [SCRIPT] [INPUTFILE...]
常用选项
-n 不输出模式空间内容到屏幕,也就是说不自动打印。
-e 多点编辑即可以在同一行里做多个编辑即一个文件可执行两条
-“#”p #号内为任意数字,如果不加数字则文件每一行命令打印两次。
-f 从指定文件中读取编辑脚本
-r 支持使用扩展正则表达式*
-i.bak 备份文件并原处编辑。
-i 可以将后续修改内容存储到文件中
s/// 查找替换,支持使用其他的分隔符,如s@@@或s###
替换标记
g 行内全局替换
p 显示替换成功的行
w /PATH/FILE 将替换成功的行保存到文件中
地址定界:
(1)不给地址对全文进行处理
(2)单地址:
#:指定的行,$:最后一行
/pattern/:被此处模式所能够匹配到的每一行
(3)地址范围:
#,# 显示#号行到#号结束行
#,+# 从#号开始往后加+#号的行
/pat1/,/pat2/ 显示内容/pat1/到内容/pat2/的内容
#,/pat1/ 第#行到显示内容为/pat1/的行。
编辑命令:
d 删除模式空间匹配的行,并立即启用下一轮循环
p 打印当前模式空间内容,追加到默认输出之后
a []text 在指定行后面追加文本,支持使用\n实现多行追加
i []text 在行前面插入文本
c []text 替换行为单行或多行文本
w /path/file 保存模式匹配的行至指定文件
r /path/file 读取指定文件的文本至模式空间中匹配到的行后
= 为模式空间中的行打印行号
! 模式空间中匹配行取反处理
高级编辑命令:
P: 打印模式空间开端至\n内容,并追加到默认输出之前
h: 把模式空间中的内容覆盖至保持空间中
H:把模式空间中的内容追加至保持空间中
g: 从保持空间取出数据覆盖至模式空间
G:从保持空间取出内容追加至模式空间
x: 把模式空间中的内容与保持空间中的内容进行互换
n: 读取匹配到的行的下一行覆盖至模式空间
N:读取匹配到的行的下一行追加至模式空间
d: 删除模式空间中的行
D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本, 并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间
不包含换行符,则会像发出d命令那样启动正常的新循环
2.grep
作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检
查;打印匹配到的行
模式:由正则表达式字符及文本字符所编写的过滤条件
grep [OPTIONS] PATTERN [FILE...]
常用命令选项:
--color=auto:对匹配到的文本着色显示,在centos7系统中alias grep=‘grep --color=auto‘为系统设置好的别名之一。
-m # 匹配#(数字)后停止
-v 显示不被pattern匹配到的行
-i 忽略字符大小写
-n 显示匹配字符所在的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串
-q 不输出任何信息
-A # after,后#行
-B # before 前#行
-C # context 前后各#行
-e 实现多个选项之间逻辑or关系
-w 匹配整个单词
-F 不支持正则表达式
-f file 根据模式文件处理
-E 或egrep 支持扩展正则表达式
扩展正则表达式:
次数匹配:
“*” 匹配前面字符任意次
? 0或1次 + 1次或多次
m 匹配m次
m,n 至少m,至多n次
位置锚定:
^行首 $行尾 \<,\b句首 \<,\b句尾
a|b a或b
C|cat C或cat
(C|c)at Cat或cat
以上是关于sed与grep的主要内容,如果未能解决你的问题,请参考以下文章