关键:使用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必需顶格写,前面不能有空格。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)