sed的使用

sed命令概述说明:

  • sed命令:字符流编辑工具(行编辑工具)===按照每行中的字符进行处理操作

  • 1擅长对行进行操作处理

  • 2擅长将文件内容信息进行修改调整/删除

功能:

  • 1文件中添加信息

  • 2文件中删除信息

  • 3文件中修改信息

  • 4文件中查询信息

sed命令的语法信息

用法: sed [选项]... {脚本(如果没有其他脚本)} [输入文件]...

选项

-n 显示出文件中需要的的信息(取消默认输出)
-i 写入文件(将内存里的信息覆盖到现在文件中)
-e 拼接多个sed命令操作指令
-r 识别扩展正则

指令

p print 输出信息
i insert 插入信息,在指定信息前面插入新的信息
a append 附加信息,在指定信息后面附加新的信息
d delete 删除指定信息
s substitute 替换
g 全局替换(如果不加g,就是出现的第一行)
c 替换修改指定的一整行信息

sed用于查找实例(test.txt)

123
abc
sky
cbd
haha

显示出文件中 有sky行

 sed -n '/sky/p'  test.txt

将有sky到yc的行显示出来多行内容(连续)

sed -n '/sky/,/yc/p' test.txt 
sky 
cbd 
yc

根据内容信息sky和yc的,输出多行内容(不连续)

sed -n '/sky/p;/yc/p' test.txt 
sky
yc

根据内容的行号,显示单行信息(显示第三行)

sed -n '3p' test.txt

根据行号信息,输出多行内容(连续)

sed -n '1,3p' test.txt

**根据行号信息,输出多行内容(不连续) **

sed -n '1p,3p' test.txt

sed添加信息方法

在文件第一行添加信息(添加好好学习)

sed -i '1i好好学习' test.txt
1i 在第一行添加

在文件最后一行添加信息(添加天天向上)

sed -i '$a天天向上' test.txt

在sky行前面添加 哈哈 在sky后面添加 嘻嘻

 sed -e '/sky/i 哈哈' -e '/sky/a 嘻嘻' test.txt 

添加IP信息

Ipaddress=10.0.0.123
mask=255.255.255.0
gateway=10.0.0.254

sed -i '$aIpaddress=10.0.0.123\nmask=255.255.255.0\ngateway=10.0.0.254' test.txt

sed删除信息方法

删除单行信息(删除文件中第三行信息)

sed -i '3d' test.txt

删除多行信息(删除第三行到第六行)

sed -i '2,6d' test.txt

删除有sky的行

sed -i '/sky/d' test.txt

删除第三行和第六行

sed -i '3d;6d' test.txt

取消空行显示

方法一
sed -i '/^$/d' test.txt
方法二
sed -ni  '/^$/!p' test.txt

sed替换(修改信息)

替换第二行正行内容

sed -i '2csky' test.txt

sed语法

sed -i 's#原有内容#修改后内容#g' 文件名

后向引用前项替换修改

sed 's#()#\n#g' 文件信息

取出IP地址信息

第一步,获取IP的行
ip a s ens33|sed -n '3p'
    inet 10.0.0.123/8 brd 10.255.255.255 scope global ens33
第二步 
ip a s ens33|sed -n '3p'|sed -r 's#^.*et (.*)#\1#g'
10.0.0.123/8 brd 10.255.255.255 scope global ens33
第三步
ip a s ens33|sed -n '3p'|sed -r 's#^.*et (.*)#\1#g'|sed -r 's#(.*)/8.*#\1#g'
10.0.0.123

精简获取IP地址

ip a s ens33|sed -rn '3s#^.*net (.*)/8 .*#\1#gp'
10.0.0.123

ifconfig ens33|sed -rn '2s#^.*et(.*) net.*#\1#gp'
 10.0.0.123 

sed命令备份

-i 容易改错了无法恢复

sed -i.bak 's#sky#haha#g' test.txt
这样就会备份一份

批量修改文件的扩展名 将sky01.txt等 替换成sky01.jpg

ls sky*.txt|sed -r 's#(.*)txt#mv & \1jgp#g' |bash

批量重命名rename

rename .txt .jpg sky*.txt
命令 文件名需要修改的部分 修改成什么信息 将什么样的文件修改

rename .jgp  .txt  sky*.jpg

sky01.txt  sky02.txt  sky03.txt  sky04.txt  sky05.txt

你可能感兴趣的:(sed的使用)