使用sed实现匹配行下一行的替换

使用sed实现匹配行下一行的替换,第1张

file_nametxt内容:

关键:使用sed的n命令-->移动到匹配行的下一行

file_nametxt内容会变为:

CBO方式:它是看语句的代价(Cost),这里的代价主要指Cpu和内存。优化器在判断是否用这种方式时,主要参照的是表及索引的统计信息。统计信息给出表的大小、多少行、每行的长度等信息。这些统计信息起初在库内是没有的,是做analyze后才出现的,很多的时候过期统计信息会令优化器做出一个错误的执行计划,因些应及时更新这些信息。

提示:主索引不一定就是优的,比如一个表只有两行数据,一次IO就可以完成全表的检索,而此时走索引时则需要两次IO,这时全表扫描(full table scan)是最好。

首先得明确你是只希望替换第一个符合条件的行?
还是所有符合条件的都替换。
前者
sed
"/^abc/{s/^abc$/123456/;q}"
atxt
后者
sed
"s/^abc$/123456/"
atxt

需要替换注释,把注释替换为注解。

为什么必须要用命令,因为涉及到很多文件,一个个把注释改为枚举太麻烦了。

使用N命令。

N: N是sed的一个处理命令,追加文本流中的下一行到模式空间进行合并处理,因此是换行符可见

命令思路:
找到

后,执行三个命令:

三个命令使用;分隔

linux每行都有r ,正则替换的时候需要考虑这些,否则替换不成功

需要替换注释,把注释替换为注解。

最近在写SH脚本,实现一键部署,其中有些环境参数是会随着现场实际情况改变而变跟的,或者说修改一些配置文件的选项值,最终找到我们的sed 命令来解决(echo "">> filename 只能添加到文件最后)

sed 命令解释如下:

我们要使用的一般都是-e 或者 -i 其他的不怎么常用。关键点在于中间的脚本;
脚本详情如下:

参考地址: >我也给个思路吧 —— 用sed根据地址范围截取文件内容,用Here documents方法添加新的多行内容,然后重组文件。具体步骤如下:
1)截取testxml文件起始行到<abcdef>行,保存到tmp文件;
2)将要添加的内容根据变量值展开,附加写入tmp文件;
3)截取testxml文件</abcdef>行到结束行,附加写入tmp文件。
4)移动tmp文件覆盖testxml文件。

代码:
12345678910111213#!/bin/sh$hostnames="host1,host2,host3 "$paragraph="many_strings"sed -n '1,/^<abcdef>/p' testxml >tmpcat <<EOF >>tmpfor hname in `echo "$hostnames" | tr ',' ' '`do insert $hname insert $paragraphdoneEOFsed -n '/^<\/abcdef>/,$p' testxml >>tmpmv tmp testxml
注意:
1) for a in b 结构中,b集合里的内容必需要空格分隔。所以我这里做了转换,用tr命令将逗号分隔改为了空格分隔。
2)第二个EOF必需顶格写,前面不能有空格。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13389674.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-26
下一篇 2023-07-26

发表评论

登录后才能评论

评论列表(0条)

保存