总结

正确的修改进文件命令(替换文件内容):
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. linux下uptime命令

    https://man.linuxde.net/uptime uptime命令能够打印系统总共运行了多长时间和系统的平均负载.uptime命令可以显示的信息显示依次为:现在时间.系统已经运行了多长时间 ...

  2. Linux 限制IP远程连接

    1.允许访问编辑 /etc/hosts.allow 文件,如下: sshd:all:allow                                      #允许所有 IP 远程 ssh ...

  3. GDB 调试技巧(不断更新中......)

    一.break到不同类的同名函数 方法: 在函数前面加类名以及作用域运算符 eg : break A::func //break 到类A的func函数 程序如下: //gdb_test.cpp #in ...

  4. python基本数据类型操作

    str 字符串 #1.进行字符串转换 首字母转换成大写 # name = 'wangjianhui' # v = name.capitalize() # print(v) #2. 字符转换小写 # n ...

  5. HTML 简单介绍

    1.什么是HTML > HTML是用来描述网页的一种语言 > HTML指的是超文本标记语言(Hyper Text Markup Language) > 标记语言是一套标记标签(mar ...

  6. Mysql教程:(六)修改语句、、删除语句、字符查询like

    1.修改语句 update 表名 set  where 条件 mysql> update student set birth=1988,department='中文系' where id=901 ...

  7. 设计模式学习-使用go实现装饰模式

    装饰器模式 定义 代码实现 优点 缺点 适用范围 装饰器模式和桥接模式的区别 参考 装饰器模式 定义 装饰模式:动态的给一些对象添加额外的职责,就增加功能来说,装饰模式比生成子类更灵活. 举个栗子: ...

  8. 菜鸡的Java笔记 第三十六 - java 函数式编程

    StudyLambda    Lambda 指的是函数式编程,现在最为流行的编程模式为面向对象,很多的开发者并不认可面向对象,所以很多的开发者宁愿继续使用 C 语言进行开发,也不愿意使用java,c+ ...

  9. [atARC101E]Ribbons on Tree

    令$f(E')$表示强制$E'$中的边不被覆盖的方案数,根据容斥,$ans=\sum_{E'\subseteq E}(-1)^{|E'|}f(E')$ 对于给定的$E'$,$f(E')$即将$E'$中 ...

  10. [cf1396E]Distance Matching

    根据$dis(x,y)=d[x]+d[y]-2d[lca(x,y)]$,由于所有点都出现了1次,距离即$\sum_{i=1}^{n}d_{i}-2\sum d[lca(x,y)]$(以下假设根深度为0 ...