sed

Posted guanbin-529

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sed相关的知识,希望对你有一定的参考价值。

Linux sed 命令是利用脚本来处理文本文件。

sed 可依照脚本的指令来处理、编辑文本文件。

Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

 

参数说明

  • -e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
  • -f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
  • -h或--help 显示帮助。
  • -n或--quiet或--silent 仅显示script处理后的结果。
  • -V或--version 显示版本信息

动作说明

  • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
  • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
  • d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
  • i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  • p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
  • s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

1. sed -e 1a\添加一行  /root/tmp/words.txt

[root@Server-n93yom tmp]# nl words.txt
     1    the day is sunny the the

     2    hello java
     3    he sunny is is
[root@Server-n93yom ~]# sed -e 1a\添加一行 /root/tmp/words.txt
the day is sunny the the
添加一行

hello java
he sunny is is

 1a意思为在第一行后面添加一行 不是真实添加

2.nl -b a words.txt | sed ‘2d‘ 删除第二行

[root@Server-n93yom tmp]# nl -b a words.txt
     1    the day is sunny the the
     2
     3    hello java
     4    he sunny is is
[root@Server-n93yom tmp]# nl -b a words.txt | sed 2d
     1    the day is sunny the the
     3    hello java
     4    he sunny is is

3. nl -b a words.txt | sed ‘2,$d‘  从第二行删除到最后一行

[root@Server-n93yom tmp]# nl -b a words.txt | sed 2d
     1    the day is sunny the the
     3    hello java
     4    he sunny is is
[root@Server-n93yom tmp]# nl -b a words.txt | sed 2,$d
     1    the day is sunny the the

4.nl -b a words.txt | sed ‘2a test123‘  在第二行后添加 test123

[root@Server-n93yom tmp]# nl -b a  words.txt | sed 2a test123
     1    the day is sunny the the
     2
test123
     3    hello java
     4    he sunny is is

5.nl words.txt | sed ‘1,4c haha‘ 第1到第4行,用haha替代

[root@Server-n93yom tmp]# nl words.txt | sed 1,4c haha
haha

6.nl words.txt | sed -n ‘3,4p‘   打印第3和第4行数据

[root@Server-n93yom tmp]# nl words.txt | sed -n 3,4p
     2    hello java
     3    he sunny is is

7.nl words.txt | sed -n ‘/hello/p‘  打印只包含hello的行

[root@Server-n93yom tmp]# nl words.txt | sed -n /hello/p
     2    hello java

8.nl words.txt | sed  ‘/hello/d‘   删除hello的匹配行,并打印剩下的行

[root@Server-n93yom tmp]# nl words.txt | sed  /hello/d
     1    the day is sunny the the

     3    he sunny is is

9.nl words.txt | sed  ‘s/hello/guan/g‘  搜索hello并替换为guan       sed ‘s/要被取代的字串/新的字串/g‘

[root@Server-n93yom tmp]# nl words.txt | sed  s/hello/guan/g
     1    the day is sunny the the

     2    guan java
     3    he sunny is is

10. nl words.txt | grep hello | sed ‘s/java//g‘  找出hello的行,并把后面的java去除

[root@Server-n93yom tmp]# nl words.txt | grep hello | sed s/java//g
     2    hello

11.sed -i ‘$a # This is a test‘ regular_express.txt   -i会真正的对文件进行编辑,所以对于系统文件要谨慎使用

[root@Server-n93yom tmp]# sed -i $a # This is a test words.txt
[root@Server-n93yom tmp]# nl words.txt
     1    the day is sunny the the

     2    hello java
     3    he sunny is is
     4    # This is a test

sed 的 -i 选项可以直接修改文件内容,这功能非常有帮助!举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了

以上都是自己手敲一遍的,如若有误请指正,谢谢

参考:https://www.runoob.com/linux/linux-comm-sed.html

以上是关于sed的主要内容,如果未能解决你的问题,请参考以下文章

Sed教程之Sed语法

sed和awk之sed篇(含sed高级用法)

sed 在指定行插入?

sed的增删改查sed常见问题

sed打印指定范围

sed删除怎么生效