在文章《grep命令使用与正则表达式搜索》提到grep
进行字符串搜索,而sed
命令可以对文本进行替换、删除、新增等操作。
使用说明
选项与参数:
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN
的数据一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过
sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在命令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的
sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是由萤幕输出。
动作说明: [n1[,n2]]function
n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作
是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』
function 有底下这些咚咚:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配
正规表示法!例如 1,20s/old/new/g 就是啦!
sed替换字符串
使用方法sed 's/要被取代的字串/新的字串/g'
废话不多说,直接看下面的列子。假如有一段文本1.txt
内容如下:
Do you charge for stopped instances?
Yes, instances in a stopped state continue to reserve dedicated system resources (RAM, SSD storage, IP aliases, CPU) and therefore incur charges until you destroy the instance.
If you wish to no longer accumulate charges for a virtual machine, please use the DESTROY button in the customer portal.
将Yes
替换为No
,使用命令:sed 's/Yes/No/g' 1.txt
但是这样文本1.txt
本身内容不会真正被替换,如果需要直接替换1.txt
内容可以添加-i
使用命令:sed -i 's/Yes/No/g' 1.txt
,直接修改文件比较危险,请谨慎操作。
如果1.txt
中存在斜杠/
,而且我们要进行替换咋办呢?可以使用%
来代替sed
中的/
,比如使用命令:sed -i 's%/ds%#sd%g' 1.txt
意思是将/ds
替换为#sd