9. Sed manage Pattern

2024-02-10 08:48
文章标签 sed pattern manage

本文主要是介绍9. Sed manage Pattern,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考 http://man.linuxde.net/sed
- x
- h
- And curly braces {} are used to group multiple SED commands
下面的都是摘抄自 http://man.linuxde.net/sed 仅帮助回忆 具体查看man
- a\ 在当前行下面插入文本。 有\ 表示将增加的内容 另起一行
- i\ 在当前行上面插入文本。
- c\ 把选定的行改为新的文本。
- d 删除,删除选择的行。
- D 删除模板块的第一行。 删除 pattern buffer 里面的第一行
- s 替换指定字符
- h 拷贝模板块的内容到内存中的缓冲区。
- H 追加模板块的内容到内存中的缓冲区。
- g 获得内存缓冲区的内容,并替代当前模板块中的文本。
- G 获得内存缓冲区的内容,并追加到当前模板块文本的后面。
- l 列表不能打印字符的清单。
- n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
- N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
- p 打印模板块的行。
- P(大写) 打印模板块的第一行。
- q 退出Sed。
- b lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。
- r file 从file中读行。
- t label if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
- T label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
- w file 写并追加模板块到file末尾。
- W file 写并追加模板块的第一行到file末尾。
- ! 表示后面的命令对所有没有被选定的行发生作用。
- = 打印当前行号码。
- #把注释扩展到下一个换行符以前。

d

delete (clears) the current pattern space, and restart the program cycle without processing the rest of the commands and without printing the pattern space.

D

delete the contents of the pattern space up to the first newline, and restart the program cycle without processing the rest of the commands and without printing the pattern space.

{}

在Mac 里面最后一个符号一定要写 ;

dingmac@cos-git$ echo -e "zhangsan\nlisi\n\n howa\naasdasdas" | sed -n '/how/{x;N;p}'
sed: 1: "/how/{x;N;p}": extra characters at the end of p command必须写成 
dingmac@cos-git$ echo -e "zhangsan\nlisi\n\n howa\naasdasdas" | sed -n '/how/{x;N;p;}'

会报错在Ubuntu 中 即linux 中

dingmac@ubuntu:~$ echo -e "zhangsan\nlisi\n\n howa\naasdasdas" | sed -n '/how/{x;N;p}'aasdasdas

-h/-H

将 pattern buffer 转移到 hold buffer

-g/-G

将 hold buffer 转移到 pattern buffer

x

进行交换

关于D 的作用 参考 https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&ved=0ahUKEwjl4q6ZhdzYAhVydt8KHdUeBxYQFghFMAM&url=https%3A%2F%2Fstackoverflow.com%2Fquestions%2F39261834%2Fwhat-does-d-command-mean-in-gnu-sed&usg=AOvVaw2WPl7tkHtquVPngU86J4Z5

seq 105 | sed ':A;N;1,5bA;D' 

解释一下上面代码的含义

1进入pattern buffer 遇到N 第二行进来 1,5 在条件内 继续循环
到第5行的时候继续 循环 6进来 现在pattern buffer 里面有 1\n2\n3\n4\n5\n6 遇到命令D 现在 pattern buffer 变成了
2\n3\n4\n5\n6

有的人会在 ':A;N;1,5bA;D' 后面再加个p
变成 ':A;N;1,5bA;D;p' 然后给一个n 参数 
将 不会输出任何内容 D 命令执行完成 后面的命令就不会执行了
也就是说 命令没有执行到最后 那不会打印出pattern buffer 里面的内容 

那么如此往复之后 遇到最后一行105 进入到pattern buffer 中 现在 pattern buffer 变成 99\n100\n101\n102\n103\n104\n105 执行到D 命令 将pattern buffer 里面的 99 删除掉 最后程序结束 打印出 pattern buffer 里面的内容

也许你会问 为什么在执行到最后的时候 程序结束 会打印出pattern buffer 里面的内容

我猜的 :)

你可以加上-n 选项

n, --quiet, --silentsuppress automatic printing of pattern space

如果加上-n 就是

dingmac@ubuntu:~$ seq 105 | sed -n ':A;N;1,5bA;D' 

将不会输出任何内容 所有可以推测 如果没有 -n 选项 sed 在退出程序的时候 会打印出pattern buffer 里面的内容

这篇关于9. Sed manage Pattern的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/696659

相关文章

Create and manage temporary, permanent, and undo tablespaces

Create and manage temporary, permanent, and undo tablespaces 关于tablespace的操作语句有三大类,分别是create tablespace、alter tablespace、drop tablespace 表空间如标题所说,总体也分为三大类,temporary tablespace 、system/sysaux/users

设计模式 -- 职责链模式(Chain of Responsibility Pattern)

1 问题引出 1.1 学校 OA 系统的采购审批项目 如果金额 小于等于 5000, 由教学主任审批 (0<=x<=5000)如果金额 小于等于 10000, 由院长审批 (5000<x<=10000)如果金额 小于等于 30000, 由副校长审批 (10000<x<=30000)如果金额 超过 30000 以上,有校长审批 ( 30000<x) 1.2 传统方式 传统方式是

Linux shell编程--sed进阶

一、多行命令 sed编 辑器包含了三个可用来处理多行文本的特殊命令。 N:将数据流中的下一行加进来创建一个多行组(multiline group)来处理。 D:删除多行组中的一行。 P:打印多行组中的一行。 二、next 命令 单行的next命令 小写的n命令会告诉sed编辑器移动到数据流中的下一文本行,而不用重新回到命令的最开始 再执行一遍。通常sed编辑器在移动到数

sed和awk编辑器

目录 一、sed编辑器 1. 概述 2. sed 流编辑器的工作过程 3. sed命令格式 3.1 基本操作格式 3.2 执行多条命令的格式 4. sed命令的选项操作符 4.1 常用选项 4.2 sed命令的操作符 5. 常用操作的语法演示 5.1 输出符合条件的文本 5.2 删除符合条件的文本 5.3 替换符合条件的文本 5.4 插入新行 6. sed总结  二

wc/sed 命令使用

一、WC 命令 功能:统计指定文件中的字节数、字数、行数,并将统计结果显示输出。 语法:wc [选项] 文件 1.1、常用选项 -c:统计字节数。 -l:统计行数。 -m:统计字符数(这个标志不能与 -c 标志一起使用)。 -w:统计字数(一个字被定义为由空白、跳格或换行字符分隔的字符串)。 -L:打印最长行的长度。 --help:显示帮助信息。 --version:显示版本信息。

linux命令:sed命令

文章目录 0x1 删除文本:0x2 多行删除:0x3 替换文本:0x4 仅替换每行的第一个匹配项:0x5 插入文本:0x6 多行插入: 0x1 删除文本: 删除第 10 行:sed '10d' filename 0x2 多行删除: 删除第 5 到第 10 行:sed '5,10d' filename 0x3 替换文本: 将所有 "old" 替换为 "new":s

关于win7下Django无法找到manage.py

前一段时间学习Python-Django,由于目前对Linux还不是很熟悉所以就在window下学习了,用的是Python3.3在建立个人blog时就是找不到Django生成的文件,可是也不显示出错,在网上找了很多说是bug经过认真仔细观察终于发现了在电脑C盘用户本机里面,现在写出来希望有需要的不要再浪费精力了

sed 命令及实战案例

🚀 本文目标:了解 sed 命令,并提供实际案例。 sed 命令 - 介绍 💚 sed 官网:GNU sed - GNU Project - Free Software Foundation ⭐ sed = stream editor,是一个没有交互,直接命令行的文本编辑器。常用于文本处理,先输入文件,然后执行一些操作(比如新增、删除、替换),最后输出修改后文本。 💖 sed 命令语法:

myeclipse中deploy按钮以及manage deployments按钮无效

如果你使用的是10.7版本,可参考本文 出错: 1.Deployments 部署按钮失效; 2.MyEclipse 启动后初始化WorkSpaces抛出Deployment的空指针异常(java.lang.NullPointerException) 3.Servers选项卡中有相关异常信息如下: at com.genuitec.eclipse.ast.deploy.core.De

sed awk 第二版学习(三)—— 编写 sed 脚本

目录 一、在脚本中应用命令 二、寻址上的全局透明 三、测试并保存输出 1. 用于测试 sed 的 shell 脚本 testsed 2. sed 永久性改动的 shell 脚本 runsed 四、sed 脚本的四种典型应用 1. 对同一文件的多重编辑 2. 改变一组文件 3. 提取文件内容 (1)提取宏定义脚本 getmac (2)生成提纲的脚本 do.outline 4.