前言
在写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
文章评论
cialis other names Pktjsg buy viagra and cialis online Aaghmq viagra comprar en madrid Qpknet can i buy cialis online precio viagra andorra Cialis Viagra En Fiv Hjyrhy