sed是stream editor(流编辑器)的缩写。它是文本处理中非常重要的工具。它能够完美地匹配正则表达式使用,功能很强大。
sed -i ‘s/pattern/replace_string/’ file
替换给定文本中的字符串
sed ‘s/pattern/replace_string/g’ file
替换每一行匹配的字符串
sed ‘s/pattern/replace_string/ng’ file
从第n处匹配开始替换
字符/在sed中作为定界符使用。我们可以像下面一样使用任意的定界符:
sed ‘s@pattern@replace_string@g’ file
sed ‘s|pattern|replace_string|g’ file
sed ‘s:pattern:replace_string:g’ file
1. 移除空行
空白行可以用正则表达试^$进行匹配
sed ‘/^$/d’ file
2. 已匹配字符串标记&
&标记匹配样式的字符串,能够在替换字符串时使用已匹配的内容
[root@server1 ~]# echo this is an example | sed ‘s/w+/[&]/g’
[this] [is] [an] [example]
正则表达式W+匹配每个单词,然后我们用[&]替换它。&对应于之前所匹配到的单词
3. 子串匹配标记1
&代表匹配给定样式的字符串。但我们也可以匹配给定样式的其中一部分。
[root@server1 ~]# echo this is test 9999 | sed ‘s/test ([0-9])/1/’
this is 9999
这条命令将test 9999替换为9999.样式中匹配到的子串是9999。(pattern)用于匹配子串。模式被包括在使用斜线转移过过的()中。对于匹配到的第一个子串,对应的标记是1,匹配到的第二个子串是2,依次类推。
[root@server1 ~]# echo test 7777 | sed ‘s/([a-z]+) ([0-9]+)/2 1/’
7777 test
([a-z]+)匹配第一个单词,([0-9]+)匹配第二个单词。1和2用来引用它们。这种引用被称为向后引用(back referencing)。 在替换部分,它们的次序被更改为2 1,因此结果呈现出逆序的形式。
4. 引用
sed表达式通常用单引号来引用。不过也可以使用双引号。双引号会通过对表达式求值来对其进行扩展。如下
sed -i “s/127.0.0.1.*$/127.0.0.1 `hostname` localhost.localdomain localhost/g” /etc/hosts
sed [-nefr] [动作]
选项与参数:
-n :使用安静(silent)模式。在一般sed的用法中,所有来自STDIN的数据一般都会被列出到屏幕上。但如果加上-n参数后,则只有经过sed特殊处理的那一行(或者动作)才会被列出来
-e :直接在指令列模式上进行sed 的动作编辑
-f :直接将 sed 的动作写在一个档案内,-f filename则可以执行filename内的sed 动作
-r :sed的动作支持的是延伸型正规表示法的用法(预设是基础正规表示语法)
-i :直接修改读取的档案内容,而不是由屏幕输出
动作说明:[n1[,n2]]function
n1, n2 :在 10 到 20 行之间进行操作
function 有底下这些东东:
a :新增,a的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)
c :取代,c 的后面可以接字符串,这些字符串可以叏代 n1,n2之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何东东;
i :插入,i 的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运作
s :取代,可以直接进行取代的工作,通常这个s的动作可以搭配正规表示法。例如 1,20s/old/new/g