`
abruzzi
  • 浏览: 454471 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

编辑器sed笔记

阅读更多

sed是一个非常非常强大的命令行编辑器,说是编辑器,还不如说是编辑程序,因为它是面向流的(没有GUI),看起来比较土,但是功能却一点也不含糊,在*nix下的shell中工作,如果有这个东东帮忙,可以少做不少事(尤其是程序员所讨厌的那种重复动作)

 

首先,sed是一个面向行的流编辑器,所以使用方法一般是通过shell中的管道,基本起一个过滤的作用(不是简单的过滤),sed对原始文件不会修改,因此可以完全“安全,无副作用”的使用。

 

使用方式:

sed -e "script" file | ...
e         : expression
script  : 自定义的sed命令
file      : 要处理的文件

 

管道符后边为其他一些命令,如more|less(查看)等

1.简单示例
sed可以从一个地址范围中,做某些指定的操作,如删除一个文件的第100行到300行,很简单

$sed -e "100,300d" file

 即可

sed的表达式一般为 range+command, 或者pattern+command,其中range表示一个范围,range的两个端点之间用逗号分隔开来。

2.使用正则表达式

*nix中的大部分支持正则表达式的工具中,正则表达式的写法一般为/regex/,当然这个/在通常情况下都是好用的,但是,如果在pattern(模式)本身就有很多/字符的情况下,则需要通过转义字符来转义。(特别是目录操作,*nix中,目录分隔符为/)

稍微高级一点的正则表达式工具都支持使用不同的分隔符来表示正则表达式的分隔。如冒号":",逗号","等。

比如,要从一个web页面中提取出所有的javascript脚本,则可以使用

$sed -ne "/<script.*>/,/<\/script>/p" web.html | less

此处的n也是一个sed参数,表示安静模式,自动输出匹配串

删除一个脚本文件中的所有注释,(在*nix系统中,脚本文件通常以#开头的行为注释)

$sed -e "/^#/d" script



3.查找替换

$sed -e "s/foo/bar" file


s表示search,foo为一个正则表达式,bar为需要被置换成的串replacement

此命令只是用bar替换每一行第一次出现的foo,如果需要完全替换

$sed -e "s/foo/bar/g" file
 


g表示global

当然,如此强大的编辑器不可能没有范围的定制参数,如,一个文件file中,第100到第150行中,所以的foo需要被替换成bar

$sed -e "100,150s/foo/bar/g" file


即可。

一般情况下,*nix系统下的命令都遵循很多的约定,一个参数在一个程序中表示的意义通常在另一个程序中表示同样的意义。(如果你会使用vim的话,会发现,sed的命令大部分与vim的编辑模式是一模一样的)

java或者vim中,关于下列列出来的正则表达式缩写有更好的解决方法,不过sed中使用的是这样一个比较奇特的格式:

 

字符类 描述
[:alnum:]
字母数字 [a-z A-Z 0-9]
[:alpha:] 字母 [a-z A-Z]
[:blank:] 空格或制表键
[:cntrl:] 任何控制字符
[:digit:] 数字 [0-9]
[:graph:] 任何可视字符(无空格)
[:lower:]
小写 [a-z]
[:print:] 非控制字符
[:punct:] 标点字符
[:space:]
空格
[:upper:] 大写 [A-Z]
[:xdigit:]
十六进制数字 [0-9 a-f A-F]


涉及到正则表达式的替换的时候,必须提到组的概念,这就是为什么sed的正则命令中的'&'字符的用途.

如,将一个脚本文件的所有行变成注释,可以使用下面这样的命令

$sed -e "s/.*/# &/g" script


这里的&表示正则表达式匹配到的字串

当然,sed的分组支持不止这些,将需要匹配的pattern用圆括号括起来,sed依次给这些组编号,\1为第一组,\2为第二组,以此类推。注意,'&'表示整个匹配。如果使用的script比较大,比较复杂,那么最好将其放入一个单独的文件:

$sed -nf command.sed file.txt


如果,需要执行多次查找替换功能,不需要依次敲入命令,只需要将这些模式放入一个大括号就可以了,如

$sed -ne "1,200{s/foo1/bar1/g s/foo2/bar2/g s/foo3/bar3/g}" file


*nix的哲学中讲究这样一点:程序最好是面向文本的(输入/输出均为文本流),这样很容易和其他的程序进行整合,从而实现比较强大的功能。当然,这里介绍的sed的命令都是一些比较基本,比较简单的功能,如果我在实践中发现更好的命令或者比较高级的用法,会再陆续的补充出来。

分享到:
评论

相关推荐

    sed学习笔记

    `sed` 是流编辑器(Stream Editor)的缩写,是一种强大的文本处理工具,它能够对输入流(标准输入或文件)进行实时编辑并输出结果。`sed` 的功能包括文本替换、行删除、行复制、行插入以及模式匹配等。在 Linux 和 ...

    sed高级用法学习笔记和实例

    - **非交互式**:sed不是交互式的编辑器,它不需要用户实时输入命令,而是通过命令行或者脚本文件来执行一系列预定义的编辑操作。 - **行编辑**:sed每次只处理一行文本,因此特别适合处理大型文件,因为它不需要将...

    sed awk学习

    SED 是一个“非交互式”的面向字符流的编辑器,它可以在一个地方指定所有的编辑指令,然后通过文件传递一次来执行他们。但是它在每次多于一行的处理能力方面有限制。SED 的优点是可以批量处理文件,而不需要交互式地...

    一些sed命令

    `sed`(Stream Editor,流编辑器)是Linux/Unix环境中的一款文本处理工具,它能在线性文本流中进行模式匹配、替换、删除等操作,无需交互式编辑,使得批量处理文本变得极其高效。在日常的脚本编程或者系统管理中,...

    VI命令笔记,非常好

    虽然文档未具体展开,但sedstyle指的是使用类似于sed流编辑器的模式匹配和替换功能,这使得在VI中执行复杂的文本替换变得更加灵活和强大。 ### 5. VI中的地址指定 文档详细解释了VI中地址的多种指定方式,包括但不...

    sed 与 awk(第二版)

    1. **字符流编辑器**:sed,全称为Stream Editor,是一种非交互式的字符流编辑器。它接收标准输入或者指定文件的数据流,对每一行进行处理,并将结果输出到标准输出。sed的工作方式是一行一行地读取文本,执行指定的...

    马哥linux手写笔记

    2. **命令行操作**:Linux的强大在于其命令行工具,笔记可能会详细介绍各种常用命令,如ls、cd、cp、mv、rm、vi/vim编辑器、grep、find、sed等,以及如何通过shell脚本自动化任务。 3. **权限与用户管理**:Linux的...

    Shell正则表达式之grep、sed、awk实操笔记

    `sed`是一种流编辑器,它能够对输入流(文本)进行编辑。下面介绍了一些基本的`sed`命令。 ##### 示例1: 替换特定字符串 - **命令**: `sed 's/pattern/replacement/g' file` - **功能**: 将文件`file`中的所有`...

    Shell脚本学习笔记

    第1章 BashShell命令 6 1.1 Shell提示符 6 1.2 文件与目录Shell命令 7 1.2.1 更改目录命令(cd) 7 ...7.3 sed编辑器基础知识 126 7.3.1 更多替换选项 126 7.3.2 使用地址 127 7.3.3 删除行 128 7.3.4 插入和附加文本 129

    vi_vim_awk_sed_grep_find_超级达人学习包

    `vi_vim键盘图.jpeg`和`vi快速学习.jpg`可能包含的是关于`vim`基本操作和快捷键的图形教程,这对于初学者来说非常有用,可以快速掌握编辑器的使用。 `awk`是一种强大的文本分析工具,它允许用户通过指定模式来处理...

    一些Linux基本知识笔记

    `vim`是一个强大的文本编辑器,用于创建、修改和查看文件。通过学习`vim`的基本操作,如插入模式、命令模式和末行模式,可以提高编辑效率。 2. **文件和目录操作**:Linux采用树形结构来组织文件系统。理解绝对路径...

    Linux笔记

    "工具"标签则意味着笔记可能涵盖了各种在Linux环境中常用的命令行工具和系统管理工具,例如grep、sed、awk、vi/vim编辑器,以及用于监控、调试和自动化任务的工具,如top、htop、strace、cron等。这些工具是Linux...

    【达内】听课笔记—UNIX

    UNIX提供了强大的文本处理工具,如grep(搜索文本模式)、sed(流编辑器)和awk(数据处理语言)。这些工具能高效地处理和分析大量文本数据,是系统管理员和程序员的得力助手。 在网络方面,UNIX系统内置了TCP/IP...

    linux-常用命令学习笔记.pdf

    "cut"命令可以从每行文本中截取指定的字段,"fmt"用于格式化文本,而"sed"是一个流编辑器,用于对输入的文本进行处理,并将结果输出到标准输出。 用户和组管理相关命令用于创建、修改和删除用户账户以及分配权限。...

    韩顺平Linux视频笔记(第一天)

    在“工具”这个标签下,可能会涉及一些常用的Linux工具,比如文本编辑器Vim或Nano,它们可以帮助我们编辑配置文件或编写脚本。另外,可能还会介绍grep、sed和awk等命令行工具,这些工具在数据处理和日志分析中非常...

    Shell学习笔记总结

    grep 命令用于搜索字符串模版,sed 命令是非交互式编辑器,awk 命令是用来操纵数据和产生报告的程序语言。 七、 awk 语言 awk 语言有多种内建变量,例如 FNR、FS、IGNORECASE、NF、NR、OFMT、OFS、ORS 和 RS。awk ...

    linux从入门到精通配套笔记

    进阶指令包括grep(搜索文本)、sed(流编辑器)、awk(数据处理工具)、find(查找文件)、du(磁盘使用情况)、top(实时监控系统状态)等。掌握这些命令能帮助你更好地管理和维护系统。 四、Linux练习题 通过...

    linux开发笔记

    1. 文本编辑器的使用: Linux下的文本编辑器有多种,其中Vim(Vi Improved)是一个非常流行的选择。`_vimrc`文件是Vim的配置文件,用户可以在这里定制自己的编辑环境,如设置快捷键、颜色主题等。学习Vim,你需要...

    缘来是黎的运维学习笔记

    在这个压缩包文件中,我们可以看到一个名为"sublime笔记"的子文件,暗示了内容可能与使用Sublime Text这款高效文本编辑器在Linux环境中进行运维工作有关。 Linux是一种广泛应用于服务器、云计算和物联网设备的操作...

Global site tag (gtag.js) - Google Analytics