sed批量替换多个文件内容
admin
2024-02-12 22:08:50
0

sed批量替换多个文件内容

1、问题:

批量生成的sql数据文件,SQL文件开始,为了提高效率需要将set timing on修改为set timing off
涉及文件数量超过两百个。

set feedback off
set define off
set echo off
set heading off
set timing on

2、解决:

通过sed解决。

(1)单个文件

做一个test.sql测试文件,内容如下:

set feedback off
set define off
set echo off
set heading off
set timing on

替换命令:

# sed -i "s/set timing on/set timing off/g" /script/program/test.txt

顺利实现。

(2)多个文件

第一次:

sed -i "s/set timing on/set timing off/g" `grep set timing on -rl /sqlscript/Thread`
#sed -i "s/set timing on/set timing off/g" `grep set timing on -rl /sqlscript/Thread
timing on -rl /sqlscript/Thread`
grep: timing: 没有那个文件或目录
grep: on: 没有那个文件或目录
grep: /sqlscript/Thread: 没有那个文件或目录
sed: 没有输入文件

第二次:
字符串空格用双引号:“set timing on”

 sed -i "s/set timing on/set timing off/g" `grep "set timing on" -rl /sqlscript/Thread`

由于每个sql文件都比较大,有几百兆,运行长时间无反应。

第三次
将g参数更换为1,不是全部更换,只更换第一次查询到的set timing on

sed -i "s/set timing on/set timing off/1" `grep "set timing on" -rl /sqlscript/Thread`

效率提高很多,但是也用了半个小时才完成。

3、sed参数

sed全称是:Stream EDitor

常用选项:
-e   --它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时使用
-f   --后跟保存了sed指令的文件
-i   --直接对内容进行修改,不加 i 时默认只是预览,不会对文件进行实际修改
-n   --取消默认输出,sed默认会输出所有文本内容,使用 -n 参数后只显示处理过的行
编辑命令:
a   --追加,向匹配行后插入内容
c   --更改,更改匹配行的内容
i   --插入,向匹配行前插入内容
d   --删除,删除匹配的内容
s   --替换,替换匹配到的内容
p   --打印,打印匹配到的内容,通常与 -n 和用
=   --用来打印被匹配到的行的行号
n  --读取下一行,遇到n时会自动跳入下一行
r,w   --读和写,r用于将内容读入文件,w用于将匹配内容写入到文件这里是引用

4、常用示例备查

sed -i "1ahello" 1.txt       --在第一行后面添加 “hello”,并保存修改
sed -i "/ab/ahello" 1.txt     --在内容ab后面添加 “hello”,并保存修改
sed "$ahello" 1.txt       --在最后一行添加 “hello”,可直接预览sed -i "2ihello" 1.txt       --在第二行之前插入 “hello”
sed -i "/ab/ihello" 1.txt     --在包含“ab”的行之前插入“hello”,如果有多行,则每一行之前都会添加sed -i "2chello" 1.txt       --将文件的第二行替换为“hello”
sed -i "/ab/chello" 1.txt     --将包含"ab"的行替换成“hello”sed ‘1d’ 1.txt       --删除第一行
sed '1~2d' 1.txt       --从第一行开始删除,每隔两行就删除一行,即删除奇数行
sed '1,2d' 1.txt       --删除掉1~2行
sed ‘1,2!d’ 1.txt     --删除1~2之外的所有行
sed '$d' 1.txt       --删除掉最后一行
sed '/ab/d' 1.txt       --删除匹配“ab”的行
sed ‘/ab/,$d’ 1.txt       --删除从匹配“ab”的行到最后一行
sed ‘/ab/,+1d’ 1.txt       --删除从匹配“ab”的行及后面一行
sed ‘/^$/d’ 1.txt       --删除空行
sed '/ab\|12/!d' 1.txt     --删除不匹配12或ab的行,/ab\|12/表示匹配12或ab,!表示取反
sed '1,3{/ab/d}' 1.txt     --删除1~3行中,匹配内容‘ab的行
sed 's/12/hello' 1.txt     --将文中的’12‘替换成’hello‘,默认只替换每行第一个’12‘
sed ’s/12/hello/g‘ 1.txt     --将文中的所有’12‘都替换成’hello‘
sed 's/12/hello/2' 1.txt     --将每行中第二个匹配的’12‘替换成’hello‘
sed -n 's/12/hello/gpw 2.txt' 1.txt     --将每行中所有匹配的’12‘替换成’hello‘,并将替换后的内容写入2.txt
sed '/#/,.*//g' 1.txt       --匹配有#号的行,替换匹配行中逗号后的所有内容,(,.*)表示逗号后的所有内容
sed 's/..$//g' 1.txt       --替换每行中的最后两个字符为空,每个点代表一个字符
sed 's/^#.*//'  1.txt       --将#开头的行替换为空行,即注释的行
sed 's/^#.*//;/^$/d'  1.txt      --先替换1.txt文件中所有注释的空行为空行,然后删除空行,替换和删除操作中间用分号隔开
sed 's/^[0-9]/(&)/'   1.txt      --将每一行中行首的数字加上一个小括号   (^[0-9])表示行首是数字,&符号代表匹配的内容
sed  's/$/&'ha'/'  1.txt     --在1.txt文件的每一行后面加上"ha"字段sed  -n '1p'  1.txt       --打印文件中的第一行内容
sed  -n '2~2p'  1.txt     --从第二行开始,每隔两行打印一行,波浪号后面的2表示步长
sed -n '$p'  1.txt       --打印文件的最后一行
sed -n '1,5p'  1.txt       --打印1到5行
sed  -n '5,$p'  1.txt       --打印从第5行到最后一行的内容
sed  -n '/you/p'  1.txt        --逐行读取文件,打印匹配you的行
sed  -n '/ab/,5p'  1.txt       --逐行读取文件,打印从匹配ab的行到第5行的内容
sed  -n '1,/ab/p'  1.txt        --打印第一行到匹配ab的行
sed  -n '/ab/,/ac/p'  1.txt       --打印从匹配内容ab到匹配内容ac的行
sed  -n "$="   1.txt         --打印1.txt文件最后一行的行号
ed  -n '/ab/='  1.txt         --打印匹配ab的行的行号
sed  -n '/ab/{=;p}'   1.txt        --打印匹配ab的行的行号和内容
sed  'r 2.txt'  1.txt           --将文件2.txt中的内容,读入1.txt中,会在1.txt中的每一行后都读入2.txt的内容
sed '1r 2.txt'  1.txt           --1.txt的第1行之后插入文件2.txt的内容
sed  '/ab/r   2.txt'   1.txt       --在匹配ab的行之后插入文件2.txt的内容,如果1.txt中有多行匹配ab则在每一行之后都会插入
sed  '$r  2.txt'   1.txt          --在1.txt的最后一行插入2.txt的内容sed  -n  'w 2.txt'   1.txt         --将1.txt文件的内容写入2.txt文件,如果2.txt文件不存在则创建,如果2.txt存在则覆盖之前的内容
sed   -n '2w  2.txt'   1.txt         --将文件1.txt中的第2行内容写入到文件2.txt
sed  -n -e '1w  2.txt'  -e '$w 2.txt'   1.txt       --将1.txt的第1行和最后一行内容写入2.txt
sed  -n -e '1w  2.txt'  -e '$w  3.txt'  1.txt         --将1.txt的第1行和最后一行分别写入2.txt和3.txt
sed  -n  '/ab\|12/w  2.txt'    1.txt          --将1.txt中匹配ab或12的行的内容,写入到2.txt中
sed  -n '/ab/,$w 2.txt'   1.txt            --将1.txt中从匹配ab的行到最后一行的内容,写入到2.txt中
sed  -n  '/ab/,+2w  2.txt'     1.txt          --将1.txt中从匹配ab的行及其后2行的内容,写入到2.txt中

相关内容

热门资讯

莲华资产洪灏:黄金成为全球资产... 近期黄金价格大幅走强,并带动有色金属板块稳健上行。2026年A股金属板块走势将如何演绎?投资者又应如...
飞阅楼市第210期丨本土“三驾... 文/青岛日报李鹏飞 2021-2025年,中国房地产行业迎来深度调整的“阵痛期”,青岛楼市在这一轮周...
突发!妙可蓝多创始人被免职并被... 【导读】妙可蓝多公告,柴琇被免去副董事长、总经理及法定代表人职务 中国基金报记者 郑俊婷 虽然妙可...
穿越周期的力量:2025中国企... 责编 | 贾宁排版| 沐言 第 9411 篇深度好文:20094字 |25分钟阅读 商业人物 笔记君...
原创 重... 欧洲正加大力度,坚决切断与俄罗斯的能源联系,尤其是在石油领域。欧盟的这一举措不仅针对直接进口俄罗斯石...
屡犯不改,这家私募被限制交易三... 【导读】多次盘中拉抬股价,浩坤昇发遭限制交易3个月 中国基金报记者 孙越 北交所近日发布一则自律监管...
从“有钱花”到“有命花”,蚂蚁... ©️深响原创 · 作者|何理 毫无意外,AI成了互联网大厂们的必争赛点。 豆包投流高歌猛进、阿里先推...
投资收手,并购加速,京东成市场... 作者 | IT桔子团队 排版 | 王梓璇 来源|IT 桔子 图片 | AI生成 “请回答中国创投 2...
寒锐钴业大宗交易折价成交18.... 寒锐钴业01月26日大宗交易平台共发生1笔成交,合计成交量18.83万股,成交金额885.01万元。...
紫金矿业,280亿元“扫货”金... 1月26日晚,紫金矿业公告称,公司控股的紫金黄金国际有限公司(以下简称“紫金黄金国际”,公司持有其8...
原创 特... “24小时里两颗重磅消息砸向欧洲。” 一头是特朗普放话要把法国红酒和香槟的关税拉到两倍再翻番,直指2...
国际金价首破5100美元势如破... 国际金价不断刷新历史新高,现货价格和期货价格先后突破5000美元/盎司、5100美元/盎司关口,部分...
资金动向 | 北水增持腾讯超1... 1月26日,南下资金净卖出港股8.26亿港元,为连续第二日净卖出。 其中:净买入腾讯控股10.15亿...
金价首破5000美元 该买还是... 封面新闻记者 边雪 “早上9点半到SKP,已经排了五六十人,等了快两小时才挪到店门口,我最后直接坐在...
迪亚洛空砍23+10+7 杰曼... 【搜狐体育战报】北京时间1月26日CBA常规赛第20轮,客场作战的北京北汽以87-86击败山西汾酒,...
刚刚,交易所出手!对白银、锡期... 数据是个宝 数据宝 投资少烦恼 上期所出手。 上期所:对相关客户采取限制开仓、限制出金监管措施 今日...
“不是借壳上市!”黎瑞刚影视版... 每经记者|丁舟洋 每经编辑|廖丹 黎瑞刚掌舵的华人文化,正以资本并购的方式将旗下核心影视资产打包注...
原创 中... 很多人可能到现在都没意识到,中国刚刚悄无声息地做了一件大事——我们彻底停止了从俄罗斯进口电力。 你没...
“五个最”战略 仁怀的底气和路... 当下,白酒行业正经历深度调整期,市场从“增量共享”转向“存量博弈”,产区间的系统性竞争日趋白热化。作...
A股发展能力百强榜出炉,谁是未... 如果说规模实力决定企业的当下地位,那么发展能力就决定了它的未来高度。 在资本市场,增长可以靠并购短期...