Linux sed 命令详解
Sed: stream editor
正则替换命令(search-and-replace)
参考资料:
https://en.wikipedia.org/wiki/Sed
http://www.gnu.org/software/sed/manual/sed.html
sed 's/regexp/replacement/g' inputFileName > outputFileName
选项与参数:
regexp:search pattern,可以理解为需要找到的内容,可以使用多种正则表达式;
replacement:
wiki上举了几个例子:
No.1
sed -r "s/(cat|dog)s?/\1s/g",表示e把所有的"cat"或"dog"替换成"cats"或"dogs",而不需要复制现成的"s":
(cat|dog) 是第一个(1st and only)regexp保存的子表达式,这里,这个子表达式(cat|dog)格式替换到表达式(\1s)中。
No.2
sed '/^ *$/d' inputFileName
符号caret (^) 表示一行的开始,符号($) 表示一行的结尾,星号 (*) 表示前一个字符(这里是空格)的一次或多次出现。
这句话的意思,就是使用/d指令删除空白或是只有空格的行。
No.3
$ echo xyz xyz | sed 's/x/y/g' (输出xyz xyz,然后sed把x替换成y)
yyz yyz
前面的命令的大致解释
-n:使用安静(silent)模式。在一般sed的用法中,所有来自STDIN的数据一般都会被列出到终端上。但如果加上-n参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来;
-e:expression, 表示后面是表达式,直接在命令列模式上进行 sed 的动作编辑;
-f:直接将sed的动作写在一个文件内,-f filename则可以运行filename内的sed动作;
-r:sed 的动作支持的是延伸型正规表示法的语法;
-i:in place editing 直接修改读取的文件内容,而不是输出到终端;
功能性指令:
a :append 新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
d :delete 删除,因为是删除,所以 d 后面通常不接任何咚咚;
i : insert 插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :print 列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :substitute 取代,替代!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
后面的参数:
g: global
sed -i 就是直接对文本文件进行操作的
sed -i 's/原字符串/新字符串/' /home/1.txt
sed -i 's/原字符串/新字符串/g' /home/1.txt
这两条命令的区别看示例吧
这是1.txt的内容
#cat 1.txt d ddd #ff
再看执行这两条命令的区别
sed -i 's/d/1234/' /home/1.txt
执行结果
1234
1234dd
#fff
sed -i 's/d/7523/g' 1.txt
执行结果
1234
123412341234
#fff