文本处理三剑客之sed命令详解
sed是流编辑器,可以对文本进行逐行判断并编辑的一种非常强大的文本处理工具
工作原理:
1.读取一行到模式空间(pattern space)
2.从指定的操作指令集中取出第一个指令,判断是否匹配所要的模式
3.不匹配就忽略后续的编辑指令,直接回到第2步读取下一条指令,以此类推,直到所有指令执行完毕
4.输出缓存在模式空间的内容,有-n选项则抑制这项输出,回到第一步继续读取下一行的内容,重复上述操作
5.直到所有行都处理完毕,结束
注:所有的处理都是对模式空间里的内容进行处理
使用格式:sed [option]... {Script} [FILE]...(其中Script包括地址跟编辑命令)
常用选项:
-n 抑制模式空间的行输出
-e 多项编辑命令一次性执行
-r 支持扩展的正则表达式
-f file 将操作命令集写在文件中,使用-f调用该文件
-i 直接修改源文件
-i.bak 直接修改源文件的同时生成备份文件
地址:
空地址:对全文进行处理
单地址:
n 行号,对第n行进行处理
/pattern/ 被正则表达式匹配到的行
地址对:
n,m 第n行到第m行
n,+m 从第n行到向下m行
n,/pattern/ 从第n行到正则表达式匹配到的行
/pattern1/,/pattern2/ 从pattern1匹配到的行到pattern2匹配到的行
$ 最后一行
步进地址表示法:
n~m 从第n行开始,每隔m行处理一行,例,处理所有奇数行:1~2;所有偶数行:2~2
编辑命令:
模式空间命令:
d:delete,删除模式空间的内容
p:print,将模式空间里的内容打印至屏幕
=:输出行号
n:next,读取下一行
l:list,输出行控制符,类似$,\t等
[line-address]c\string:change,改变指定行的内容为string,只支持单行处理
[line-address]a\STRING:append,在指定行下一行追加内容,只支持单行处理
[line-address]i\STRING:insert,在指定行上一行追加内容,只支持单行处理
s/RegExp/REPLACE/g:search,搜索与替换,"/"可以换成其他符号:#@%…支持多行处理
在s///中使用分组及后向引用 eg: sed -r 's/i love (\S+) and (\S+)/\1 love \2/' /tmp/test
y/abc/xyz/:转换字符,a转成x,b转成y,c转成y,逐一对应转换
[line-address]r file:read,将文件 file 的内容读取到指定行中
w file:write,保存内容至文件 file 中
[line-address]q : quit,读取到匹配行之后退出
N:将下一行读至模式空间,用\n连接上一行,若其后再无操作,则等价于跳过下一行
P:输出上一行的内容
D:删除上一行的内容
保持空间命令:
H/h:hold,将模式空间内容复制(h),通过\n追加(H)到保持空间
G/g: get,将保持空间内容复制(g),通过\n追加(G)到模式空间
x:exchange,将保持空间内容和模式空间内容交换
例子:
1.使用n或p打印奇数行或偶数行(列出4种方法)
1 sed -n 'p;n' test.txt #奇数行 2 sed -n 'n;p' test.txt #偶数行 3 sed -n '1~2p' test.txt #奇数行 4 sed -n '2~2p' test.txt #偶数行
2.对于包含test到west之间的行,每行加上字符串'aaa bbb'
sed '/test/,/west/s/$/aaa bbb/' file
3. 查找包含line1的行到包含line2的行之间的所有aa bbb替换成AA BBB
sed '/line1/,/line2/s/aa bbb/AA BBB/' test.sh
4.显示第一次匹配到的3到最后一行输出
sed -n '/3/,$p' test.sh
5.逆序显示文本内容
1 sed '1!G;h;$!d' test 2 sed -n '1!G;h;$p' test
6.删除原有的所有空白行,而后为所有的非空白行后添加一个空白行
sed '/^$/d;G' /etc/passwd
7.将'yes'替换成'no',并且只在行中未出现字串'hello'的情况下替换
sed '/hello/ !s/yes/no/g' file
8.将每行的字符逆序显示
sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//' file
这题较难,给一个流程:
PATT:abc$
HOLD:$
COMM:/\n/ !G
PATT:abc\n$
HOLD:$
COMM:s/\(.\)\(.*\n\)/&\2\1/
PATT:abc\nbc\na$
HOLD:$
COMM:// D
PATT:bc\na$
HOLD:$
COMM:/\n/ !G
PATT:bc\na$
HOLD:$
COMM:s/\(.\)\(.*\n\)/&\2\1/
PATT:bc\nc\nba$
HOLD:$
COMM:// D
PATT:c\nba$
HOLD:$
COMM:/\n/ !G
PATT:c\nba$
HOLD:$
COMM:s/\(.\)\(.*\n\)/&\2\1/
PATT:c\n\ncba$
HOLD:$
COMM:// D
PATT:\ncba$
HOLD:$
COMM:/\n/ !G
PATT:\ncba$
HOLD:$
COMM:s/\(.\)\(.*\n\)/&\2\1/
PATT:\ncba$
HOLD:$
COMM:// D
PATT:\ncba$
HOLD:$
COMM:s/.//
PATT:cba$
HOLD:$
cba
9.将数字'1234567'显示为1,234,567
echo "1234567" | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta'
转载于:https://www.cnblogs.com/fllf/p/10023301.html
文本处理三剑客之sed命令详解相关推荐
- Linux|文本处理三剑客之sed命令详解
文章目录 sed命令 sed命令处理文本的过程: sed的常用选项: sed的常用编辑命令: sed的p命令示例: 引用shell变量:双引号 .花括号括变量名 &的用法 标签的用法(分组思想 ...
- Shell三剑客之sed命令详解
目录 一.sed命令的常见用法 选项 操作 二.用法示例 2.1.输出符合条件的文本(p表示正常输出) 2.2.sed结合正则表达式输出指定行 2.3.删除符合条件的文本 2.4.插入符合条件的行 三 ...
- 1.10-linux三剑客之sed命令详解及用法
内容: 1.sed命令介绍 2.语法格式,常用功能 查询 增加 替换 批量修改文件名 第1章 sed是什么 字符流编辑器 Stream Editor 第2章 sed功能与版本 处理出文本文件,日志 ...
- linux 之sed命令详解
sed命令详解 sed是什么 sed是linux文本处理三剑客之一,全称 StreamEDitor,非常著名的行编辑器,功能十分强大. sed的工作过程 sed处理文本时每次从文件复制出来一行,放在工 ...
- linux三剑客之awk命令详解
linux三剑客之awk命令详解 awk 是一个处理文本的编程语言工具,能用简短的程序处理标准输入或文件.数据排序.计算以及生成报表等等.awk工具主要用于格式化输出,可以用类似于处理表格的方式处理文 ...
- linux sed p变量,Linux sed 命令详解系列教程之各种问题解决
本文目录: 1 sed中使用变量和变量替换的问题 2 反向引用失效问题 3 "-i"选项的文件保存问题 4 贪婪匹配问题 5 sed命令"a"和"N& ...
- cut\grep\awk\sed命令详解
cut\grep\awk\sed命令详解 1.cut命令详解及实例 (1)作用:提取文件中指定的列 语法格式:cut 选项 文件名 (2)选项作用: -d 分隔符 按照指定的 ...
- ubuntu下sed命令详解 - Dicky - 开源中国社区
ubuntu下sed命令详解 - Dicky - 开源中国社区 ubuntu下sed命令详解 - Dicky - 开源中国社区 ubuntu下sed命令详解 7人收藏此文章, 我要收藏 发表于 ...
- linux sed.写文件,Linux文件处理sed命令-linux sed命令详解-linux sed写入文件-嗨客网
Linux文件处理sed命令详解教程 Linux sed命令使用 Linux sed 命令处理时,把当前处理的行存储在临时缓冲区中,称为 "模式空间"( oattern space ...
最新文章
- 使用jquery的load方法设计动态加载,并解决被加载页面JavaScript失效问题
- kalman 滤波 演示与opencv代码
- git 文件全部标红_git冲突解决,代码冲突、合并冲突。【IDEA版本】
- 《OpenGL ES应用开发实践指南:Android卷》—— 2.2 不要从头开始
- makefile文件简要介绍
- Navicat日期时间格式
- JavaScript——易班优课YOOC课群在线测试自动答题解决方案(二十)整理维护
- C51语言支持哪些数据类型,C51编译器支持的数据类型(1)
- java xml 反射_Java 读取XML文件以及Java 的反射机制实现
- 微信小程序教程02:App(Object)和Page(Object) 构造器介绍
- 三大运营商5G基站大单纷纷落地:华为、中兴、爱立信、大唐移动收获大
- JS----window对象详解
- 【论文分享】ACL 2020 信息抽取任务中的新动向
- 基于C++的校园一卡通管理系统
- usb声卡驱动_哑巴电脑拯救者——它可能是你见过使用最简单的外接声卡!
- 我的gitbub的学习目录
- 【苹果鼠标滑轮失灵】解决办法
- 利用FlashPaper在web页面中显示PDF文件(兼容各浏览器)
- 统一网关Gateway、路由断言工厂、路由过滤器及跨域问题处理
- Vue笔记随笔---kalrry