转自:http://blog.chinaunix.net/uid-26963748-id-3249732.html

一、Sed简介

Sed:Stream Editor  流式编辑器 又称行编辑器,每次只编辑一行。Sed工作是在“模式空间”中进行的,并不操作源文件。对源文件无危害。

二、Sed使用格式

    Sed命令的常用格式如下:

(1)Sed [options] ‘script’ input_file…

(2)Sed [options] –f script_file input_file…

(3)Sed [options] ‘ADDR1,ADDR2command’ input_file…

例如:#sed ’1,2d’ fstab 就可以将fstab的前两行删除并显示出来,但是它不会改变源文件。

#Sed ‘1,2!d’ fstab 表示删除除第一行和第二行之外的所有行。

(4)Sed [options] ‘/PATTERN/command’ input_file……

&:s/l..e/&er/:表示引用前面匹配到的所有字符。

例如:sed ‘/[[:upper:]]/d’ binary.sh 表示删除所有的大写字母的行。

(5)Sed ‘/PATTERN1/,/PATTERN2/command’ input_file……

说明:这表示从第一次被PATTERN1匹配到的行到第一次被PATTERN2匹配到的中间的所有行执行command命令。

三、Sed的常用选项:

    -n:只显示sed匹配到的行。其余行不显示。下文有范例。

-i :可以直接操作原文件。默认情况下sed不会改变原文件,但是-i选项可以修改原文件,此选项应慎用。

-r:可以使用标准正则表达式。默认情况下sed只支持基本正则表达式,但是加上-r选项后则支持扩展正则表达式

-e:多脚本共用。可以同时执行多个命令。例如:

 [root@localhost ~]# sed -e 's@\<h\([[:alpha:]]*\)\>@H\1@g' -e 's@\(l..e\)\.@\1r.@g' test

He love His lover.

She like Her liker.

Dove love Her liker.

也可以这样用,中间用分号隔开:

[root@localhost ~]# sed 's@\<h\([[:alpha:]]*\)\>@H\1@g;s@\(l..e\)\.@\1r.@g' test

四、Sed的常用命令

(1)P:模式空间中的文本在处理之前,每一次都会先显示一下;用p命令后再显示一下,即:匹配到的文本显示两次:例如:

 [root@localhost ~]# sed '1,2p' fstab

/dev/vol0/root          /                       ext3    defaults                   1 1

/dev/vol0/root          /                       ext3    defaults                   1 1

/dev/vol0/home        /home               ext3    defaults                   1 2

/dev/vol0/home        /home               ext3    defaults                   1 2

LABEL=/boot         /boot                ext3    defaults                   1 2

tmpfs                      /dev/shm           tmpfs   defaults                   0 0

devpts                    /dev/pts             devpts  gid=5,mode=620   0 0

sysfs                      /sys                      sysfs    defaults                 0 0

proc                     /proc                   proc    defaults                   0 0

LABEL=SWAP-sda3       swap       swap    defaults                 0 0

我们可以看到第1,2行显示了两次。如果你只想显示用sed处理的行,则可在其前加-n选项。例如:sed  -n ‘1,2p’ fstab 其显示结果如下:

root@localhost ~]# sed -n '1,2p' fstab

/dev/vol0/root             /                        ext3    defaults        1 1

/dev/vol0/home          /home                 ext3    defaults        1 2

(2)a  \:表示在模式匹配到的行后面添加新内容;

i  \:表示在模式匹配到的行前面添加新内容;

           /n:实现添加多行。如下例所示:

 [root@localhost ~]# sed '/#/a \ This is a comment line.\nIt can be ignore.' test.sh

#!/bin/bash

 This is a comment line.

It can be ignore.

#

 This is a comment line.

It can be ignore.

JUSER() {

    if id -u root &> /dev/null;then

       echo "Exists"

    else

       echo "No this user."

    fi

}

JUSER &> /dev/null

echo $?

这表示在#行的后面加上两行文字,如果将a换成i则表示在#行的前面添加文字。

注意:sed '/#/!i \ This is a comment line.\nIt can be ignore.' test.sh,如果在i前面加!表示对除了匹配到的行的其他行的前面添加以上两行。这样大家基本明白了a,i命令的使用方法了吧。

 (3)r FILE:表示读取某一个文件。例如:

root@localhost ~]# sed '2r c.txt' c.sh  #表示在c.sh的第二行添加c.txt的内容。

#!/bin/bash

#

This is my first lesson.

Think you!

line 1

line 2

line 3

 [root@localhost ~]# sed '/^#/r c.txt' c.sh  #表示在c.sh的#开头的行后面添加c.txt的内容。

#!/bin/bash

This is my first lesson.

Think you!

#

This is my first lesson.

Think you!

line 1

line 2

line 3

(4)w FILE: 可以将模式匹配到的行保存下来。例如:

root@localhost ~]# cat c.sh     #显示c.sh中的内容

#!/bin/bash

#

line 1

line 2

line 3

[root@localhost ~]# sed -n '/^#/w cc.sh' c.sh  #将c.sh文件中以#开头的行保存在cc.sh中

[root@localhost ~]# cat cc.sh                         #cc.sh的内容

#!/bin/bash

#

(5)s:s/PATTERN/string/[g|i]   表示搜索符号PATTERN的内容,将其替换为string。

       g:表示将搜索到的内容全部替换。

       i:表示将搜索到的内容忽略大小写。

       如果PATTERN中含有与分隔符相同的字符时,可以将分隔符替换为其他符号。例如:s@PATTERN@string@[g|i]

范例如下:

[root@localhost ~]# cat test        #显示test的内容

He love his love.

She like her like.

Dove love her like.

[root@localhost ~]# sed 's@\(l..e\)\.@\1r.@' test  #在最后一个单词后面加r,注意第.

He love his lover.                                                #前面要加转义字符\

She like her liker.

Dove love her liker.

[root@localhost ~]# sed 's@\<h\([[:alpha:]]*\)\>@H\1@g' test  #将以h开头的单词替换

He love His love.                                       #为以H开头

She like Her like.

Dove love Her like.

(6)n:以覆盖的方式读去下一行。

         N:以追加的方式读取下一行。例如:

[root@localhost ~]# cat test          #test中的内容

He love his love.

She like her like.

Dove love her like.

four line

[root@localhost ~]# sed -n 'n;p' test   #使用n时的效果

She like her like.

four line

[root@localhost ~]# sed 'n;d' test     #只显示偶数行。

He love his love.

Dove love her like.

[root@localhost ~]# sed -n 'N;p' test   #使用N时的效果

He love his love.

She like her like.

Dove love her like.

four line

[root@localhost ~]# sed 'N;N;s@\n@ @g' test  #表示将前三行合并为一行

He love his love. She like her like. Dove love her like.

four line

[root@localhost ~]# sed '/\.$/!N;s@\n@ @g;s/bad animal/BAD ANIMAL/g' test 

He love his love.

She like her like.

Dove love her like.

four line Wendy is BAD ANIMAL.

Blair is a BAD ANIMAL.

这题目较复杂:(1)/\.s/!N:表示先搜索不已点号结尾的行,(2)s@\n@ @g:将搜索到的行去掉换行符 (3)将小写的bad animal 替换为BAD ANIMAL. 

(7) h:将模式空间中的内容以覆盖的方式复制到保留空间。

           H:将模式空间中的内容以追加的方式复制到保留空间。

  g:将保留空间的内容以覆盖的方式复制到模式空间。

  G:将保留空间的内容以追加的方式复制到模式空间。例如:

[root@localhost ~]# cat newfile             #显示文件中的内容

line 1

line 2

line 3

[root@localhost ~]# sed -n 'h;n;G;h;n;G;p' newfile  #将文件中的行倒序排列

line 3

line 2

line 1

(8)b:跳转,掠过符合条件的行。例如:

[root@localhost ~]# sed '1b;y/123/456/' newfile

line 1

line 5

line 6

此例表示:跳过第一行,将其他各行的123替换为456;其中y表示替换的意思。

b lable:表示跳转到某个位置。例如

[root@localhost ~]# cat newfile

line 1

line

line 3

line

[root@localhost ~]# sed '/.*[[:digit:]].*/b para;s/.*/% &/;:para;s/.*[0-9].*/# &/g' newfile

# line 1

% line

# line 3

% line

此例表示,将带数字的行前添加#,不带数字前添加%;定义para为跳转符。这个参数可以随意指定。

本文只是对sed的一些常用命令和选项做介绍,其余命令可查看帮助手册。谢谢!

[转]sed常用命令总结的更多相关文章

  1. sed 常用命令 网址

    https://wangchujiang.com/linux-command/c/sed.html https://linux.cn/article-11367-1.html https://juej ...

  2. sed常用命令

    sed也是一个管道命令. sed [-nefr] [动作] -n 加上-n参数后,只有经过sed特殊处理的那些行才会被列出来 -e 直接在命令行模式进行sed的动作编辑 -i  直接修改读取的文件内容 ...

  3. 23、sed常用命令

    1.匹配与不匹配: n p ! sed -n '/ATTGC/p' file1                ##-n打印匹配到的行输出,默认所有行输出. sed -n '/AT\|GC/p' fil ...

  4. akw、grep、sed常用命令

    awk 求和 cat data|awk '{sum+=$1} END {print "Sum = ", sum}' 平均值 cat data|awk '{sum+=$1} END ...

  5. sed 常用命令

    删除以ifeq开头的行 sed -i "/^ifeq/d" file 删除空行 sed -i '/^$/d' file

  6. grep,awk和sed的常用命令和语法

    Grep的常用命令语法 1. 双引号引用和单引号引用在g r e p命令中输入字符串参数时,最好将其用双引号括起来.例如:“m y s t r i n g”.这样做有两个原因,一是以防被误解为 s h ...

  7. Linux常用命令之sed(2)

    Sed SED的英文全称是 Stream EDitor,它是一个简单而强大的文本解析转换工具,在1973-1974年期间由贝尔实验室的Lee E. McMahon开发,今天,它已经运行在所有的主流操作 ...

  8. shell常用命令归类整理

    shell 命令整理     bash shell 含有许多功能,因此有许多可用的命令:本文档仅罗列了一些常用命令及其使用频率较高的参数.#本文档仅罗列了一些常用命令及其使用频率较高的参数.#vers ...

  9. Liunx 常用命令

    Liunx 常用命令================================================================================ 1. 远程拷贝文件 ...

随机推荐

  1. spring-boot | 整合通用Mabatis 分页插件PageHelper

    Mybatis通用Mapper介绍 Mybatis 通用 Mapper 极其方便的使用 Mybatis 单表的增删改查,支持单表操作,不支持通用的多表联合查询 优点: 通用 Mapper 可以极大的方 ...

  2. 轰炸III(codevs 1830)

    题目背景 一个大小为N*M的城市遭到了X次轰炸,每次都炸了一个每条边都与边界平行的矩形. 题目描述 在轰炸后,有Y个关键点,指挥官想知道,它们有没有受到过轰炸,如果有,被炸了几次,最后一次是第几轮. ...

  3. Tomcat配置文件server.xml(转)

    前言 Tomcat隶属于Apache基金会,是开源的轻量级Web应用服务器,使用非常广泛.server.xml是Tomcat中最重要的配置文件,server.xml的每一个元素都对应了Tomcat中的 ...

  4. MAPZONE GIS SDK接入Openlayers3之三——瓦片数据集接入

    瓦片数据集接入实现思路: 1.构造ol.source.TileImage数据源,构造该数据源需要以下几项: 1)空间参考,通过如下代码构造 2)TileGrid,构造需要以下几项: a)原点 b)分辨 ...

  5. Hadoop 究竟能做什么?

    http://hi.baidu.com/jiuxiaoyao/item/ff0a19e5b09a953a87d9def3 现在好像大家都在讲 大数据 云计算 hadopp .那么hadoop究竟能做些 ...

  6. Visual Assist X破解版安装(vs2010助手)

    从网上下载了Visual Assist X 版本号的破解版,安装文件夹为默认的c://program files/Visual Assist X/,当我把破解的VA_X.dll粘贴到该文件夹下,VC+ ...

  7. 使用微信JSSDK实现图片上传

    近期做的一个项目,刚好用到了JSSDK,把用到的东西整理下. 先附上微信开发人员文档链接:微信开发人员文档 主要用到了: 引入JS文件 在须要调用JS接口的页面引入例如以下JS文件.(支持https) ...

  8. skynet 控制台管理使用技巧

    skynet 自带了一个控制台服务.能够非常方便获取和调试 skynet 执行数据,并且能够热更新代码,所以.弄明确skynet控制台管理能够让你更好地使用skynet,甚至改进这个控制台服务.以满足 ...

  9. 扩展VirtualBox中的centos硬盘大小

    一.克隆文件 我之前安装的时候建的是centos 6.3.可是后来空间不够,没办法,又不想重装centos.由于好多东西要配置,特麻烦,所以先想到了使用resize命令,可是在win8中运行D:\Pr ...

  10. jQuery事件传播,事件流

    一. jQuery事件传播 在DOM2级事件模型中,一旦事件被触发.事件流首先从DOM树顶部(文档节点)向下传播.直到目标节点.然后再从目标节点向上传播到DOM树顶.从上到下的过程被称为捕获阶段.从下 ...