sed 修改文件
总结
正确的修改进文件命令(替换文件内容):
sed -i "s#machangwei#mcw#g" mcw.txt
正确的修改追加进文件命令(追加文件内容):
sed -i "\$a 8: wo bu hao\!" mcw.txt
sed -i '$a 7: wo hen hao!' mcw.txt
最后一行$a追加内容,加上-i修改到文件;单引号无需转义,双引号需要注意特殊字符转义
只有-i和替换,没有-n和打印,才是我们经常需要的替换。将文件内容替换并写入到文件了
第几行上面插入字符串,但是并不修改原文件,加上-i也不行,使用单双引号也不行
匹配指定行上面插入或追加字符串,会报错,加上-i不行,不加还是不行,
替换文件存在的坑
sed -i "s#machangwei#mcw#g" mcw.txt
只有-i和替换,没有-n和打印,才是我们经常需要的替换。将文件内容替换并写入到文件了。不能添加-n和打印做sed替换
替换实操
首先创建一个测试文件
[machangwei@mxxx01 ~/mcw]$ mkdir mcw03
[machangwei@mxxx01 ~/mcw]$ cd mcw03/
[machangwei@mxxx01 ~/mcw/mcw03]$ vim mcw.txt
[machangwei@mxxx01 ~/mcw/mcw03]$ cat mcw.txt
1: ni hao ya
2:
3: wo shi machangwei
4: 22bc
5: fff abc
6: abc
[machangwei@mxxx01 ~/mcw/mcw03]$ cp mcw.txt mcw.txt.bak
[machangwei@mxxx01 ~/mcw/mcw03]$ ls
mcw.txt mcw.txt.bak
-n却没有打印,不显示替换结果也不改变文件
[machangwei@mxxx01 ~/mcw/mcw03]$ sed -n "s#machangwei#mcw#g" mcw.txt
[machangwei@mxxx01 ~/mcw/mcw03]$ cat mcw.txt
1: ni hao ya
2:
3: wo shi machangwei
4: 22bc
5: fff abc
6: abc
-n没有打印,就是空内容,加上-i就把空内容加到文件里了。文件就空了,内容被删除。sed操作前最好先备份
[machangwei@mxxx01 ~/mcw/mcw03]$ sed -ni "s#machangwei#mcw#g" mcw.txt
[machangwei@mxxx01 ~/mcw/mcw03]$ cat mcw.txt
[machangwei@mxxx01 ~/mcw/mcw03]$
[machangwei@mxxx01 ~/mcw/mcw03]$ cp mcw.txt.bak mcw.txt
[machangwei@mxxx01 ~/mcw/mcw03]$ sed -ni "s#machangwei#mcw#g" mcw.txt
[machangwei@mxxx01 ~/mcw/mcw03]$ cp mcw.txt.bak mcw.txt
-n且打印,就显示替换后的那一行,
[machangwei@mxxx01 ~/mcw/mcw03]$ sed -n "s#machangwei#mcw#gp" mcw.txt
3: wo shi mcw
没有-n,替换然后打印。替换的行是重复打印
[machangwei@mxxx01 ~/mcw/mcw03]$ sed "s#machangwei#mcw#gp" mcw.txt
1: ni hao ya
2:
3: wo shi mcw
3: wo shi mcw
4: 22bc
5: fff abc
6: abc
-n加打印p,只显示替换的行,并且显示是替换后的结果
[machangwei@mxxx01 ~/mcw/mcw03]$ sed -n "s#machangwei#mcw#gp" mcw.txt
3: wo shi mcw
-n加打印p,本来就显示替换后的行,加个-i修改文件,那么把显示的替换都的行写入文件,相当于重写文件或者说把显示结果覆盖到原文件
[machangwei@mxxx01 ~/mcw/mcw03]$ sed -ni "s#machangwei#mcw#gp" mcw.txt
[machangwei@mxxx01 ~/mcw/mcw03]$ cat mcw.txt
3: wo shi mcw
[machangwei@mxxx01 ~/mcw/mcw03]$ cp mcw.txt mcw.txt.bak
[machangwei@mxxx01 ~/mcw/mcw03]$ sed -n "s#machangwei#mgp" mcw.txt
sed:-e 表达式 #1,字符 16:未终止的“s”命令
[machangwei@mxxx01 ~/mcw/mcw03]$ sed -n "s#machangwei#mcw#gp" mcw.txt
[machangwei@mxxx01 ~/mcw/mcw03]$ cat mcw.txt
3: wo shi mcw
[machangwei@mxxx01 ~/mcw/mcw03]$ cat mcw.txt.bak
3: wo shi mcw
-i插入,后面还有个p打印,会将替换掉的行重复写入到文件
[machangwei@mxxx01 ~/mcw/mcw03]$ vim mcw.txt
[machangwei@mxxx01 ~/mcw/mcw03]$ vim mcw.txt.bak
[machangwei@mxxx01 ~/mcw/mcw03]$ sed -n "s#machangwei#mcw#gp" mcw.txt
3: wo shi mcw
[machangwei@mxxx01 ~/mcw/mcw03]$ sed -i "s#machangwei#mcw#gp" mcw.txt
[machangwei@mxxx01 ~/mcw/mcw03]$ cat mcw.txt
1: ni hao ya
2:
3: wo shi mcw
3: wo shi mcw
4: 22bc
5: fff abc
6: abc
[machangwei@mxxx01 ~/mcw/mcw03]$ cat mcw.txt.bak
1: ni hao ya
2:
3: wo shi machangwei
4: 22bc
5: fff abc
6: abc
[machangwei@mxxx01 ~/mcw/mcw03]$ cp mcw.txt.bak mcw.txt
[machangwei@mxxx01 ~/mcw/mcw03]$ sed -i "s#machangwei#mcw#gp" mcw.txt
[machangwei@mxxx01 ~/mcw/mcw03]$ cat mcw.txt
1: ni hao ya
2:
3: wo shi mcw
3: wo shi mcw
4: 22bc
5: fff abc
6: abc
只有-i和替换,没有-n和打印,才是我们经常需要的替换。将文件内容替换并写入到文件 了
[machangwei@mxxx01 ~/mcw/mcw03]$ cp mcw.txt.bak mcw.txt
[machangwei@mxxx01 ~/mcw/mcw03]$ sed -i "s#machangwei#mcw#g" mcw.txt
[machangwei@mxxx01 ~/mcw/mcw03]$ cat mcw.txt
1: ni hao ya
2:
3: wo shi mcw
4: 22bc
5: fff abc
6: abc
[machangwei@mxxx01 ~/mcw/mcw03]$
[machangwei@mxxx01 ~/mcw/mcw03]$ #上面是替换中存在的坑
追加到文件最后一行实操
准备文件
[machangwei@mxxx01 ~/mcw/mcw03]$ #下面是插入和追加到文件
[machangwei@mxxx01 ~/mcw/mcw03]$ cat mcw.txt
1: ni hao ya
2:
3: wo shi mcw
4: 22bc
5: fff abc
6: abc
最后一行追加内容,不加-i会显示追加后的内容,但是不修改文件。这里是单引号
[machangwei@mxxx01 ~/mcw/mcw03]$ sed '$a 7: wo hen hao!' mcw.txt
1: ni hao ya
2:
3: wo shi mcw
4: 22bc
5: fff abc
6: abc
7: wo hen hao!
[machangwei@mxxx01 ~/mcw/mcw03]$ cat mcw.txt
1: ni hao ya
2:
3: wo shi mcw
4: 22bc
5: fff abc
6: abc
最后一行追加内容,加上-i修改到文件。这里单引号
[machangwei@mxxx01 ~/mcw/mcw03]$ sed -i '$a 7: wo hen hao!' mcw.txt
[machangwei@mxxx01 ~/mcw/mcw03]$ cat mcw.txt
1: ni hao ya
2:
3: wo shi mcw
4: 22bc
5: fff abc
6: abc
7: wo hen hao!
[machangwei@mxxx01 ~/mcw/mcw03]$ sed "\$a 8: wo bu hao!" mcw.txt
-bash: !": event not found
[machangwei@mxxx01 ~/mcw/mcw03]$ sed -i '$a 7: wo hen hao\!' mcw.txt
[machangwei@mxxx01 ~/mcw/mcw03]$ vim mcw.txt
[machangwei@mxxx01 ~/mcw/mcw03]$
双引号最后一行追加,需要将里面的特殊字符串转义 。不加-i不修改文件
[machangwei@mxxx01 ~/mcw/mcw03]$ sed "\$a 8: wo bu hao\!" mcw.txt
1: ni hao ya
2:
3: wo shi mcw
4: 22bc
5: fff abc
6: abc
7: wo hen hao!
8: wo bu hao!
[machangwei@mxxx01 ~/mcw/mcw03]$ #双引号里特殊字符会被解析,所以要转义
[machangwei@mxxx01 ~/mcw/mcw03]$ cat mcw.txt
1: ni hao ya
2:
3: wo shi mcw
4: 22bc
5: fff abc
6: abc
7: wo hen hao!
双引号最后一行追加,需要将里面的特殊字符串转义 。加-i修改了原文件
[machangwei@mxxx01 ~/mcw/mcw03]$ sed -i "\$a 8: wo bu hao\!" mcw.txt
[machangwei@mxxx01 ~/mcw/mcw03]$ cat mcw.txt
1: ni hao ya
2:
3: wo shi mcw
4: 22bc
5: fff abc
6: abc
7: wo hen hao!
8: wo bu hao!
[machangwei@mxxx01 ~/mcw/mcw03]$ sed "$d" mcw.txt
1: ni hao ya
2:
3: wo shi mcw
4: 22bc
5: fff abc
6: abc
7: wo hen hao!
8: wo bu hao!
第几行插入字符串,但是并不修改原文件
[machangwei@mxxx01 ~/mcw/mcw03]$ sed '7i 小马过河' mcw.txt
1: ni hao ya
2:
3: wo shi mcw
4: 22bc
5: fff abc
6: abc
小马过河
7: wo hen hao!
8: wo bu hao!
[machangwei@mxxx01 ~/mcw/mcw03]$ cat mcw.txt
1: ni hao ya
2:
3: wo shi mcw
4: 22bc
5: fff abc
6: abc
7: wo hen hao!
8: wo bu hao!
第几行插入字符串,但是并不修改原文件,加上-i也不行
[machangwei@mxxx01 ~/mcw/mcw03]$ sed -i '7i 小马过河' mcw.txt
1: ni hao ya
2:
3: wo shi mcw
4: 22bc
5: fff abc
6: abc
-i 小马过河
7: wo hen hao!
8: wo bu hao!
[machangwei@mxxx01 ~/mcw/mcw03]$ cat mcw.txt
1: ni hao ya
2:
3: wo shi mcw
4: 22bc
5: fff abc
6: abc
7: wo hen hao!
8: wo bu hao!
[machangwei@mxxx01 ~/mcw/mcw03]$ sed '7i 小马过河' mcw.txt
1: ni hao ya
2:
3: wo shi mcw
4: 22bc
5: fff abc
6: abc
-i i 过河
7: wo hen hao!
8: wo bu hao!
第几行上面插入字符串,但是并不修改原文件,加上-i也不行使用双引号也不行
[machangwei@mxxx01 ~/mcw/mcw03]$ sed "7i 小马过河" mcw.txt
1: ni hao ya
2:
3: wo shi mcw
4: 22bc
5: fff abc
6: abc
小马过河
7: wo hen hao!
8: wo bu hao!
[machangwei@mxxx01 ~/mcw/mcw03]$ cat mcw.txt
1: ni hao ya
2:
3: wo shi mcw
4: 22bc
5: fff abc
6: abc
7: wo hen hao!
8: wo bu hao!
[machangwei@mxxx01 ~/mcw/mcw03]$ sed -i "7i 小马过河" mcw.txt
1: ni hao ya
2:
3: wo shi mcw
4: 22bc
5: fff abc
6: abc
-i 小马过河
7: wo hen hao!
8: wo bu hao!
[machangwei@mxxx01 ~/mcw/mcw03]$ cat mcw.txt
1: ni hao ya
2:
3: wo shi mcw
4: 22bc
5: fff abc
6: abc
7: wo hen hao!
8: wo bu hao!
匹配指定行上面插入字符串,但是并不修改原文件,加上-i也不行,使用双引号也不行,
[machangwei@mxxx01 ~/mcw/mcw03]$ sed "/wo he/i 小马过河" mcw.txt
1: ni hao ya
2:
3: wo shi mcw
4: 22bc
5: fff abc
6: abc
-i/wo he/i马过河
7: wo hen hao!
8: wo bu hao!
[machangwei@mxxx01 ~/mcw/mcw03sed '/wo he/i 小马过河' mcw.txt
1: ni hao ya
2:
3: wo shi mcw
4: 22bc
5: fff abc
6: abc
小马过河
7: wo hen hao!
8: wo bu hao!
[machangwei@mxxx01 ~/mcw/mcw03]$
[machangwei@mxxx01 ~/mcw/mcw03]$ sed '/wo he/i 小马过河' mcw.txt
1: ni hao ya
2:
3: wo shi mcw
4: 22bc
5: fff abc
6: abc
小马过河
7: wo hen hao!
8: wo bu hao!
[machangwei@mxxx01 ~/mcw/mcw03]$ cat mcw.txt
1: ni hao ya
2:
3: wo shi mcw
4: 22bc
5: fff abc
6: abc
7: wo hen hao!
8: wo bu hao!
匹配指定行上面插入或追加字符串,会报错,加上-i不行,不加还是不行,
[machangwei@mxxx01 ~/mcw/mcw03]$ sed -i '/wo he/i 小马过河' mcw.txt
> ^C
[machangwei@mxxx01 ~/mcw/mcw03]$ sed '/abc/a 小马过河' mcw.txt
1: ni hao ya
2:
3: wo shi mcw
4: 22bc
5: fff abc
小马过河
6: abc
小马过河
7: wo hen hao!
8: wo bu hao!
[machangwei@mxxx01 ~/mcw/mcw03]$ cat mcw.txt
1: ni hao ya
2:
3: wo shi mcw
4: 22bc
5: fff abc
6: abc
7: wo hen hao!
8: wo bu hao!
[machangwei@mxxx01 ~/mcw/mcw03]$ sed -i '/abc/a 小马过河' mcw.txt
1: ni hao ya
2:
3: wo shi mcw
4: 22bc
5: fff abc
6: abc
7: wo hen hao!
8: wo bu hao!
[machangwei@mxxx01 ~/mcw/mcw03]$ cat mcw.txt
1: ni hao ya
2:
3: wo shi mcw
4: 22bc
5: fff abc
6: abc
7: wo hen hao!
8: wo bu hao!
sed 修改文件的更多相关文章
- shell编程系列12--文本处理三剑客之sed利用sed修改文件内容
shell编程系列12--文本处理三剑客之sed利用sed修改文件内容 修改命令对照表 编辑命令 1s/old/new/ 替换第1行内容old为new ,10s/old/new/ 替换第1行到10行的 ...
- sed 修改文件内容
修改命令对照表 练习实例 修改/etc/passwd中第1行第1个root为ROOT sed -i '1s/root/ROOT/' passwd 修改/etc/passwd中第5行到第10行中所有的/ ...
- Shell基础(五):sed基本用法、使用sed修改系统配置、sed多行文本处理、sed综合脚本应用
一.sed基本用法 目标: 本案例要求熟悉sed命令的p.d.s等常见操作,并结合正则表达式,完成以下任务: 1> 删除文件中每行的第二个.最后一个字符 2> 将文件中每行的第一个. ...
- linux下通过sed命令直接修改文件内容
sed是实现对流的编辑.通常,我们使用sed可以实现内容的编辑后然后保存成另外的一个文件,如果正确的话,才写入到源文件.但是某些时候,我们需要直接修改文件,因为,保存文件到一个文件,然后再覆盖原文件的 ...
- linux命令(51):set 指定行,直接替换并修改文件
sed 命令: 指定行,从第一行到第一行: 把该行的ssd,换成cd: -i 表示的是替换并直接修改文件: sed -i '1,1s/ssd/cd/g' test_file 命令使用: sed - ...
- linux之touch命令修改文件的时间戳
功能:对已经存在文件的时间进行修改,存取时间(access time).修改时间(modification time).对不存在的文件,进行创建新的空白文件. 语法:touch [选项] 文件 ...
- linux命令:set 指定行,直接替换并修改文件
sed 命令: 指定行,从第一行到第一行: 把该行的ssd,换成cd: -i 表示的是替换并直接修改文件: sed -i '1,1s/ssd/cd/g' test_file 命令使用: sed - ...
- linux --批量修改文件内容
由于目前测试的BIOS有一个option 发生了改变,因此我们需要在之前写好的脚本上进行修改,将旧的option 改为新的选项,因此在此处用到了批量修改文件中的内容: 1. perl 命令替换: pe ...
- 文件IO操作..修改文件的只读属性
文件的IO操作..很多同行的IO工具类都是直接写..但是如果文件有只读属性的话..则会写入失败..所以附加了一个只读的判断和修改.. 代码如下: /// <summary> /// 创建文 ...
随机推荐
- 2021NOI同步赛
\(NOI\) 网上同步赛 明白了身为菜鸡的自己和普通人的差距 DAY1 \(T1\) 轻重边 [题目描述] 小 W 有一棵 \(n\) 个结点的树,树上的每一条边可能是轻边或者重边.接下来你需要对树 ...
- FPGA基础之锁存器与触发器的设计
转载:https://blog.csdn.net/lg2lh/article/details/39081061 一.锁存器 首先设计锁存器的时候应该清楚什么是锁存器,锁存器其实是对电平信号敏感的,一定 ...
- hdu 3635 Dragon Balls(并查集)
题意: N个城市,每个城市有一个龙珠. 两个操作: 1.T A B:A城市的所有龙珠转移到B城市. 2.Q A:输出第A颗龙珠所在的城市,这个城市里所有的龙珠个数,第A颗龙珠总共到目前为止被转移了多少 ...
- linux 内核源代码情景分析——linux 内存管理的基本框架
386 CPU中的页式存管的基本思路是:通过页面目录和页面表分两个层次实现从线性地址到物理地址的映射.这种映射模式在大多数情况下可以节省页面表所占用的空间.因为大多数进程不会用到整个虚存空间,在虚存空 ...
- RabbitMQ多消费者顺序性消费消息实现
最近起了个项目消息中心,用来中转各个系统中产生的消息,用到的是RabbitMQ,由于UAT环境.生产环境每台消费者服务都是多台,有些消息要求按顺序消费,所以需要采取一定的措施保证消息的顺序消费,下面讲 ...
- (三)lamp环境搭建之编译安装php
1,PRC (People's republic of China) timezone中设置的时间为中国时间. 2,php的官方镜像源,使用linux时可以直接下载的 http://cn2.php.n ...
- 用tsc编译ts文件的时候报错,tsc : 无法加载文件,因为在此系统上禁止运行脚本;
用tsc编译ts文件的时候报错,tsc : 无法加载文件,因为在此系统上禁止运行脚本:SecurityError 在vscode的控制台或者Windows PowerShell中用tsc命令编译ts文 ...
- celery kill task
from celery.task.control import revokerevoke(task_id, terminate=True) https://stackoverflow.com/ques ...
- oracle基础:怎样把查询的null转换为0、打印、定义变量
https://blog.csdn.net/xuxile/article/details/49943665 oracle怎样把查询的null转换为0 1.查询的null转换为0 NVL(Expr1,E ...
- 菜鸡的Java笔记 第十六 - java 引用传递
referenceDelivery 引用传递是整个java 的精髓,也是所有初学者最难学的地方 引用的本质:同一块堆内存可以被不同的栈内存所指向 下面通过三道程序来进行引用传 ...