sed用法

Linux评论1阅读模式

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

 
  • 本文由 yeho 发表于 2012-03-06
  • 转载请务必保留本文链接:https://linuxeye.com/104.html
读《sed与awk》第1~3章笔记 脚本

读《sed与awk》第1~3章笔记

sed、awk功能 sed 在一个或多个文件上自动实现编辑操作 简化对多个文件执行相同的编辑处理工作 编写转换程序 awk 将文本文件看做由记录和字段组成的文本数据库 使用变量操作数据库 使用算术和字...
读《Linux Shell脚本攻略》第7章笔记 脚本

读《Linux Shell脚本攻略》第7章笔记

这章内容比较简单,花了不到2小时,所以记录的也相对来说少了很多。 1. fping ping扫描工具大都需要等待前一个被探测主机返回某种响应消息之后才能继续探测下一台主机是否存在,但fping却能以轮...
匿名

发表评论

匿名网友
确定

拖动滑块以完成验证