文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>SED使用说明

SED使用说明

时间:2005-11-08  来源:junglegq

节选自: http://chinaunix.net/jh/24/605565.html

SED使用说明

节选自: http://chinaunix.net/jh/24/605565.html

 

用途:

一般 sed 最常用在编辑那些需要不断重复某些编辑动作的档上

 

Sed工作流程:(自己总结)

while (fgets(buf, sizeof(buf), input.dat) != NULL)

    if (匹配地址) {

        strcpy(pattern_space, buf);

        edit_by_function(pattern_space);

        fputs(pattern_space, stdout);

    }

 

Sed命令格式:

Sed 命令列可分成编辑指令与操作文件部份

sed 的编辑指令均由位址(address)与函数(function)两部份组成,格式:

       [address1[,address2]]function[argument]

 

也可以写一个sed脚本,执行  sed –f script input.dat

或:sed -e '编辑指令1' -e '编辑指令2' ... input.dat

 

实际上 , 地址参数表示法只是将要编辑的数据行 , 用它们的行数或其中的字符串来代替表示它们

当数据行中有符合 regular expression 所表示的字符串时 , 则执行函数参数指示的编辑动作。另外 , 在 regular expression 前后必须加上 "/"。例如指令为 /t.*t/d , 表示删除所有含两 "t" 字母的数据行。其中 , "." 表示任意字符; "*" 表示其前字符可重复任意次 , 它们结合 ".*" 表示两 "t" 字母间的任意字符串。

 

默认sed 会 "自动的" 将数据由 pattern space 输送到标准输出檔,在命令列上的选项 -n  表示输出由编辑指令控制

eg.

    sed -e '1,3p' input.dat        //将输出选定行+所有文件行,也就是说选定行将打印2遍

    sed -n -e '1,3p' input.dat     //-n选项不打印所有文件行,因此只是显示我们选定的行

当 "执行...动作" 要由数个函数参数表示时 , 则可利用 "{ "与 " }" 集合这些函数参数

 

使用者可用 sed 中的 hold space 暂存编辑中的数据、用函数参数 w(参照[section4.9])将文件数据搬动到其它文件、或用函数参数 r(参照[section4.8])将其它文檔内容搬到本文件内。Hold space 是 sed 用来暂存 pattern space 内数据的缓存器 , 当 sed 执行函数参数 h、H(参照[section4.19])时 , 会将 pattern space 资料暂存到 hold space;当执行函数参数 x、g、G(参照[section4.22])时 , 会将暂存的资料取到 pattern space 

 

^$ 表示空白行。 其中 , ^ 限制其后字符串必须在行首; $ 限制其前字符串必须在行尾。 

 

函数参数 N(参照[section4.16])表示 , 将空白行的下一行资料添加至 pattern space 内

 

函数参数介绍:

函数参数 s 表示替换(substitute)文件内字符串。其指令格式如下 : 
[address1[ ,address2]] s/pattern/replacemen/[flag]

 

& : 代表其前 pattern 字符串

 

flag : 主要用它来控制一些替换情况 : 
当 flag 为 g 时 , 代表替换所有符合(match)的字符串 。 
当 flag 为十进制数 m 时 , 代表替换行内第 m 个符合的字符串。 
当 flag 为 p 时 , 代表替换第一个符合 pattern 的字符串后 , 将数据输出标准输出文件。 
当 flag 为 w wfile 时 , 代表替换第一个符合 pattern 的字符串后 , 输出到 wfile 檔内(如果 wfile 不存在 , 则会重新开启名为 wfile 的档案)。 

 

当没有 flag 时 , 则将本行内第一个(可能一行内有多个匹配)符合 pattern 的字符串以 replacement 字符串来替换 

 

 

 

函数参数 a 表示将资料添加到文件中。其指令格式如下: 

      [address1] a

      使用者所输入的数据 

 

其他类似的格式函数包括:

函数参数 i 表示将资料插入文件中

 

函数参数 c 表示改变文件中的数据。其格式如下: 
     [address1[ ,address2]]c     

 使用者所输入的数据行1

 使用者所输入的数据行2

 

函数参数 r 表示读入它档案内容到檔中。其指令格式如下 : 
       [address1] r 它檔名称

函数参数 w 表示将檔中的写到它檔内。其指令格式如下 : 
     [address1[ ,address2]] w 它檔名称

 

4.10 y 
函数参数 y 表示转换数据中的字符

Eg.

说明: 利用函数参数 y 指示 sed 做字母大小的转换。 

sed 命令列如下 : 

 sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ' input.dat

 

函数参数 ! 表示不执行函数参数

 

函数参数 n 表示读入下一行资料

sed 执行读入下一行动作的情况如下 : 
输出在 pattern space 的数据。 
将下一笔资料读到 pattern space。 
执行下一个编辑指令

eg

sed -n -e 'n' -e 'p' infro.dat

 

函数参数 q 表示跳离 sed

 

注意,大写字母的函数名往往表示为“添加”

函数参数 N 表示添加下一笔资料在 pattern space 内

Eg

说明 : 先利用函数参数 N 将两行数据置于 pattern space 内 , 在利用函数参数 s/ / / 将两行数据间的分隔号   以空白替代 , 如此两行数据变成一行输出

sed -e 'N' -e 's/ / /' input.dat

 

函数参数 h 表示暂存 pattern space 的资料至 hold space。其指令格式如下: 
     [address1 ,[address2]] h

sed 执行暂存动作时 , 会盖掉(overwrite) hold space 内原来的数据。 
当 sed 全部执行结束时 , hold space 内数据会自动清除

 

函数参数 H 与 h 唯一差别是 , sed 执行 h 时 , 数据盖掉(overwrite) hold space 内原来的数据 , 而 H , 数据则是 "添加(append)" 在 hold space 原来数据后

 

函数参数 g 表示与函数参数 h 相反的动作 , 它表示将 hold space 内资料放回 pattern space 内。其指令格式如下 : 
     [address1,address2]g

sed 执行放回动作时 , 数据盖掉(overwrite)(批注[13]) pattern space 内原来的数据

 

函数参数 G 与 g 唯一差别是 , sed 执行 g 时 , 数据盖掉(overwrite) pattern space 内原来的数据 , 而 G , 数据则是 "添加(append)" 在 pattern space 原来数据后

 

函数参数 x 表示交换 hold space 与 pattern space 内的数据。其指令格式如下 : 
     [address1 ,[address2]] x 

 

 

 

常用的 regular expression 
普通字符  由普通字符所组成的 regular expression 其意义与原字符串字面意义相同。  
^字符串  限制字符串必须出现于行首 。 
$字符串  限制字符串必须出现行尾。  
.  表示任意一字符。 
[...]  字符集合, 用以表示两中括号间所有字符当中的任一个 ,如 [^...]表示两中括号间所有字符以外的字符。 
-&  字符集合中可用

相关阅读 更多 +
排行榜 更多 +
打螺丝高手

打螺丝高手

模拟经营 下载
解救火柴人计划安卓版

解救火柴人计划安卓版

体育竞技 下载
鸡生化精英安卓版

鸡生化精英安卓版

飞行射击 下载