Sed的简单用法

Sed的简单用法

欢迎来到 来到大浪涛天的博客

提到sed很多人都不会陌生,它和grep,awk合称为文本编辑的三剑客,而且排行老二,所以它的强大不言而喻,当然言归正传,sed在文本编辑中的增删改查确实十分方便易用,用好了对之后的工作能提升很高的效率

Sed的简单用法

1. sed命令概述说明:

  • sed是一种流编编器,它是文本处理中非常中的工具,能够完美的配合正则表达式便用,功能不同凡响。
  • 处理时,把当前处理的行存储在临时缓冲区中,称为”模式空间”( oattern space)。
  • 接看用sed命令处理缓冲区中的内容,处理成后,把缓冲区的内容送往屏幕显示。
  • 接着理下一行,这样不断重复,直到文件末,内容没有改改变,除非使用了写入的命令,将内容更新。
  • 定址用于决定对哪些行进行编辑。
  • 地址的形式可以是数字、正则表达式、或二者的结合。如果没有指定地址,sed将处理输入文件的所有行。
  • sed命令属于字符流编辑工具(行编辑工具)==按照每行中的字符进行处理操作

2. sed命令作用说明:

  • 擅长对行进行操作处理
  • 擅长将文件的内容信息进行修改调整/删除
  • 文件中添加信息的能力 (增) ok
  • 文件中删除信息的能力 (删) ok
  • 文件中修改信息的能力 (改)
  • 文件中查询信息的能力 (查) OK

3. sed命令的语法信息

sed [OPTION]... {script-only-if-no-other-script} [input-file]...
    命令 参数        条件+处理= (指令)              处理文件信息

4. sed命令实践操作:

  • 创建测试环境:
cat >person.txt<<EOF
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
EOF	

4.1 sed命令查询信息方法

4.1.1 根据文件内容的行号进行查询:

  • 显示单行信息
[root@oldboyedu ~]# sed -n '3p' person.txt 
 103,Alex,COO
  • 根据行号信息,输出多行内容(连续)
[root@oldboyedu ~]# sed -n '1,3p' person.txt 
 101,oldboy,CEO
 102,zhaoyao,CTO
 103,Alex,COO
  • 根据行号信息,输出多行内容(不连续)
[root@oldboyedu ~]# sed -n '1p;3p' person.txt 
101,oldboy,CEO
103,Alex,COO

4.2 根据文件内容的信息进行查询:

  • 根据内容信息,输出单行内容
    • 将有oldboy行的信息找出来
    [root@oldboyedu ~]# sed -n '/oldboy/p' person.txt 
    101,oldboy,CEO
  • 根据内容信息,输出多行内容(连续)
    • 将有oldboy到alex行的信息都输出出来
	[root@oldboyedu ~]# sed -n '/oldboy/,/Alex/p' person.txt 
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
  • 根据内容信息,输出多行内容(不连续)
    • 将有oldboy和alex行的信息都输出出来
	[root@oldboyedu ~]# sed -n '/oldboy/p;/Alex/p' person.txt 
    101,oldboy,CEO
    103,Alex,COO
    106,oldboy,CIO

4.3 sed命令添加信息方法

  • 在文件第一行添加信息:
    100,oldgirl,UFO
	[root@oldboyedu ~]# sed  '1i100,oldgirl,UFO' person.txt
    100,oldgirl,UFO
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO
  • 在文件最后一行添加信息:
	[root@oldboyedu ~]# sed  '$a108,oldgirl,UFO' person.txt
    100,oldgirl,UFO
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO
    108,oldgirl,UFO

4.4 测试在文件后面添加信息:

  • 在第三行后面添加oldboy.txt信息
    sed '3aoldboy.txt' person.txt
  • 在第二行前面添加oldboy.txt信息
    sed '2ioldboy.txt' person.txt
  • 在有oldboy行的前面添加oldgirl 后面添加olddog信息
    sed -e '/oldboy/ioldgirl' -e '/oldboy/aolddog' person.txt
	[root@oldboyedu ~]# sed -e '/oldboy/ioldgirl' -e  '/oldboy/aolddog' person.txt
    100,oldgirl,UFO
    oldgirl
    101,oldboy,CEO
    olddog
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    oldgirl
    106,oldboy,CIO
    olddog

4.5 在文件中添加多行信息

sed '$a100 101' person.txt
企业中编写配置文件:
IPaddress=10.10.10.1
mask=255.255.255.0
gateway=10.10.10.254
sed '$aIPaddress=10.10.10.1 mask=255.255.255.0 gateway=10.10.10.254' person.txt

4.6 sed命令删除信息方法

  • 删除单行信息
	[root@oldboyedu ~]# #删除文件中第三行信息
    [root@oldboyedu ~]# sed '3d' person.txt 
    100,oldgirl,UFO
    101,oldboy,CEO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO
  • 删除多行信息
    [root@oldboyedu ~]# #删除文件中第二行到第六行内容
    [root@oldboyedu ~]# sed '2,6d' person.txt 
    100,oldgirl,UFO
    106,oldboy,CIO
  • 删除有oldboy信息的行
    sed '/oldboy/d' person.txt
  • 删除文件中第二行到第六行内容
    [root@oldboyedu ~]# sed '2,6d' person.txt 
    100,oldgirl,UFO
    106,oldboy,CIO
  • 删除文件中第三行和第六行内容
   [root@oldboyedu ~]# sed '3d;6d' person.txt 
   100,oldgirl,UFO
   101,oldboy,CEO
   103,Alex,COO
   104,yy,CFO
   106,oldboy,CIO
  • 如何利用sed命令取消空行显示
	[root@oldboyedu ~]# sed -n '/./p' person.txt 
    100,oldgirl,UFO
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO
    
    [root@oldboyedu ~]# sed '/^$/d' person.txt 
    100,oldgirl,UFO
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO
    
    [root@oldboyedu ~]# sed -n '/^$/!p' person.txt 
    100,oldgirl,UFO
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO
  • sed命令修改信息方法

  • sed 's#原有内容#修改后内容#g' 文件信息

	[root@oldboyedu ~]# sed 's##oldgirl#old#g' person.txt 
    sed: -e expression #1, char 12: unknown option to `s'
    [root@oldboyedu ~]# sed 's/#oldgirl/old/g' person.txt 
    100,old,UFO
    
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    
    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO
  • sed 's#()# #g' 文件信息 后项引用前项进行替换修改
    • 利用sed命令取出IP地址信息:
[test@test03 ~]$ ip a s eth0|sed -rn 's#^.*t (.*)/.*#1#gp'
10.211.55.3
  • 修改文件内容直接进行自动备份
[test@test03 ~]$ sed -i.bak 's#old#new#g' test
[test@test03 ~]$ ls
test  test.bak
  • 在真实替换文件内容时候,一定不能让n和i参数同时出现
    [root@oldboyedu ~]# sed -ni 's#Alex#aaaa#gp' person.txt
    103,aaaa,COO
	[root@oldboyedu ~]# cat person.txt
    103,aaaa,COO
	说明: ni和参数同时使用,会将文件内容进行清空
  • 批量重命名,把test.txt重命名为test.jpg
[test@test03 test]$ touch test{1..3}.txt
[test@test03 test]$ ls test* |sed -r 's#(test.*)txt#mv 1txt 1jpg#g' |bash
[test@test03 test]$ ls
test1.jpg  test2.jpg  test3.jpg
[test@test03 test]$ ls test*|sed -r 's#(.*)jpg#mv & 1txt#g'|bash
[test@test03 test]$ ls test*|sed -r 's#(.*)txt#mv 1txt 1jpg#g'|bash   
[test@test03 test]$ ls
test1.jpg  test2.jpg  test3.jpg
  • 专业的重命名工具:rename
rename   .txt         .jpg        oldboy*.txt
命令     需要修改的部分  改成的部分    需要修改的文件

例如:

[test@test03 test]$ rename .jpg .txt test*.jpg
[test@test03 test]$ ls
test1.txt  test2.txt  test3.txt	

4.7 文件中添加内容方法:

  1. vim/vi
  2. cat >>xxx<EOF .. EOF
  3. echo -e "xxx xxx"
  4. sed 'na/i xxxx xxxx sxxxx'

5. sed小结

  • sed命令小结
	p  print        输出信息
	i  insert       插入信息,在指定信息前面插入新的信息
	a  append       附加信息,在指定信息后面附加新的信息
	d  delete       删除指定信息
	s  substitute   替换信息 s###g(全局替换)
	c               替换修改指定的一整行信息
[root@oldboyedu ~]# sed '2coldboyedu-sz-01' person.txt
    103,aaaa,CEO
    oldboyedu-sz-01
  • sed命令的参数小结
    -n  取消默认输出
    -r  识别扩展正则
    -i  真实编辑文件(将内存中的信息覆盖到磁盘中)	
	-e  识别sed命令多个操作指令
原文地址:https://www.cnblogs.com/chacha51/p/13764838.html