[Shell]使用sed文件内容替换插入和删除,以及特殊字符的处理

2021-03-14 595点热度 0人点赞 0条评论

前言

在写Shell脚本的时候,有时候要替换、删除某个文件中的内容,但是又不方便用vim做交互的动作,这就可以用到『sed』命令来做批量的替换、插入、删除

用法

sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)

常用选项(options):

  • -n∶使用安静(silent)模式。在一般sed 的用法中,所有来自 STDIN的资料一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过sed特殊处理的那一行(或者动作)才会被列出来。
  • -e∶直接在指令列模式上进行 sed 的动作编辑;
  • -f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed动作;
  • -r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
  • -i∶直接修改读取的档案内容,而不是由屏幕输出。

常用命令(command):

  • a∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
  • c∶替换, c 的后面可以接字串,这些字串可以取代n1,n2 之间的行!
  • d∶删除,因为是删除,所以 d后面通常不接任何内容
  •  i∶插入, i的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  • p∶打印,就是将某个选择的资料显示。通常 p 会与参数 sed-n 一起运作
  • s∶替换,可以直接进行替换!通常这个 s的动作可以搭配正则表达式

删除文件中的内容,command: d

# 删除file文件的第2行
sed '2d'/path/to/file

# 删除file文件的第2行到末尾所有行
sed '2,$d' /path/to/file

# 删除file文件的最后一行
sed '$d' /path/to/file

# 删除file文件所有包含test的行
sed '/test/'d /path/to/file

显示文件中的指定内容 -n

# 显示file文件第一行
sed -n '1p' /path/to/file

# 显示file文件最后一行
sed -n '$p' /path/fo/file

# 显示file文件第1-2行
sed -n '1,2p' /pah/to/file

# 显示file文件第2到最后一行
sed -n '2,$p' abc.file

模式查询

# 查询关键词包含test的所有行
sed -n '/test/p' /path/to/file

# 查询包括关键字$所在所有行,使用反斜线\屏蔽特殊含义
sed -n '/\$/p' /path/to/file

插入行

# 第一行后增加字符串"XXX"
sed '1a XXX' /path/to/file 

# 第一行到第3行,每行后面都增加字符串"XXX"
sed '1,3a XXX' /path/to/file

替换文件中某一行

# 第一行代替为XXX
sed '1c XXX' /path/to/file

# 第一行到第2行代替为XXX
sed '1,2c XXX' /path/to/file

替换文件中的内容,需要替换的内容还可以使用正则表达式,command: s

sed 's/要被替换的字符串/新的字符串/g'

# 在整行范围内把old替换为new 如果没有g标记,则只有每行第一个匹配的old被替换成new
# 这种方式只会把结果打印到屏幕上,想要保存看下面-i
sed 's/old/new/g' /path/to/file

# 直接修改并保存
sed -i 's/old/new/g' /path/to/file

如果内容遇到/等特殊字符,那么sed里用到的/可以用冒号:或者#代替
#替换的内容含有/,那么分隔符就用冒号,或者#号
#示例中,我们要把my.storageRoot=/storage 修改成 my.storageRoot=/home/storage
sed -i 's:my.storageRoot=/storage:my.storageRoot=/home/storage:g' /opt/monitor/application.properties

admin

这个人很懒,什么都没留下

文章评论

*

code