总结

正确的修改进文件命令(替换文件内容):
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 修改文件的更多相关文章

  1. shell编程系列12--文本处理三剑客之sed利用sed修改文件内容

    shell编程系列12--文本处理三剑客之sed利用sed修改文件内容 修改命令对照表 编辑命令 1s/old/new/ 替换第1行内容old为new ,10s/old/new/ 替换第1行到10行的 ...

  2. sed 修改文件内容

    修改命令对照表 练习实例 修改/etc/passwd中第1行第1个root为ROOT sed -i '1s/root/ROOT/' passwd 修改/etc/passwd中第5行到第10行中所有的/ ...

  3. Shell基础(五):sed基本用法、使用sed修改系统配置、sed多行文本处理、sed综合脚本应用

    一.sed基本用法 目标: 本案例要求熟悉sed命令的p.d.s等常见操作,并结合正则表达式,完成以下任务: 1> 删除文件中每行的第二个.最后一个字符    2> 将文件中每行的第一个. ...

  4. linux下通过sed命令直接修改文件内容

    sed是实现对流的编辑.通常,我们使用sed可以实现内容的编辑后然后保存成另外的一个文件,如果正确的话,才写入到源文件.但是某些时候,我们需要直接修改文件,因为,保存文件到一个文件,然后再覆盖原文件的 ...

  5. linux命令(51):set 指定行,直接替换并修改文件

    sed 命令: 指定行,从第一行到第一行: 把该行的ssd,换成cd: -i 表示的是替换并直接修改文件: sed  -i  '1,1s/ssd/cd/g' test_file 命令使用: sed - ...

  6. linux之touch命令修改文件的时间戳

    功能:对已经存在文件的时间进行修改,存取时间(access time).修改时间(modification time).对不存在的文件,进行创建新的空白文件. 语法:touch   [选项]  文件 ...

  7. linux命令:set 指定行,直接替换并修改文件

    sed 命令: 指定行,从第一行到第一行: 把该行的ssd,换成cd: -i 表示的是替换并直接修改文件: sed  -i  '1,1s/ssd/cd/g' test_file 命令使用: sed - ...

  8. linux --批量修改文件内容

    由于目前测试的BIOS有一个option 发生了改变,因此我们需要在之前写好的脚本上进行修改,将旧的option 改为新的选项,因此在此处用到了批量修改文件中的内容: 1. perl 命令替换: pe ...

  9. 文件IO操作..修改文件的只读属性

    文件的IO操作..很多同行的IO工具类都是直接写..但是如果文件有只读属性的话..则会写入失败..所以附加了一个只读的判断和修改.. 代码如下: /// <summary> /// 创建文 ...

随机推荐

  1. PWM通过RC低通滤波器模拟DAC

    当我们电路需要DAC而单片机并没有DAC外设时,则可采用PWM通过RC低通滤波器来模拟实现DAC功能. RC低通滤波器 当采用低通滤波器模拟DAC时,PWM频率应远大于RC低通滤波电路的截止频率fc= ...

  2. 面试官问我JVM内存结构,我真的是

    面试官:今天来聊聊JVM的内存结构吧? 候选者:嗯,好的 候选者:前几次面试的时候也提到了:class文件会被类加载器装载至JVM中,并且JVM会负责程序「运行时」的「内存管理」 候选者:而JVM的内 ...

  3. HTML 罗盘式时钟

    代码块: 1 <!DOCTYPE html> 2 <html lang="zh-hans"> 3 <head> 4 <meta chars ...

  4. Arthas在线java进程诊断工具 在线调试神器

    tag: java 诊断 堆栈 在线调试 耗时 死锁 arthas 阿里巴巴 Arthas (阿尔萨斯) Arthas 是 Alibaba 开源的Java诊断工具,深受开发者喜爱. 官网文档:http ...

  5. 攻防世界 Misc 新手练习区 如来十三掌 Writeup

    攻防世界 Misc 新手练习区 如来十三掌 Writeup 题目介绍 题目考点 佛曰加密.base64.Rot13等加密方法的了解 Writeup 下载并打开附件 联想到佛曰加密,复制内容到 佛曰加密 ...

  6. bash: mysql: command not found(解决方法)

    执行mysql -uroot -p ,出现如图问题 解决方法如下: 执行以上命令,系统默认会查找/usr/bin下的命令,若这个命令不在该目录下,就会找不到,我们需要做的就是映射一个链接到/usr/b ...

  7. MacOS修复TNT和谐软件运行崩溃、闪退问题

    因为Apple删除了TNT的证书,因此部分应用程序出现了打开崩溃的情况. 目前的解决方案是自己更改签名. 第一种方法: 在终端中运行以下命令:(注意:name.app就是需要更改签名的程序) sudo ...

  8. python Max retries exceeded with URL in requests

    使用requests进行重试 import requests from requests.adapters import HTTPAdapter from requests.packages.urll ...

  9. 快速排序平均时间复杂度O(nlogn)的推导

    快速排序作为随机算法的一种,不能通过常规方法来计算时间复杂度 wiki上有三种快排平均时间复杂度的分析,本文记录了一种推导方法. 先放快速排序的伪代码,便于回顾.参考 quicksort(int L, ...

  10. 使用Token进行CSRF漏洞防御

    1.登录验证成功之后,在会话SESSION["user_token"]中保存Token. 2.在后台操作中,增删改表单中添加隐藏域hidden,设置value为Token. 3.提 ...