makefile(shell)中sed命令详解 |
您所在的位置:网站首页 › sed版本 › makefile(shell)中sed命令详解 |
Sed(a stream editor) 4 个空间 :input stream, pattern buffer, output stream 和 hold buffer 基本操作过程是 : (1). 将 input stream 的当前行放入 pattern buffer, 然后 input stream 的指针指向下一行 ; (2). 对 pattern buffer 中的行进行处理 ; (3). 将 2 的处理结果放入 output stream. 然后循环这个过程 . hold buffer 是另一个空间 , 可以通过命令和 pattern buffer 进行交互 . sed 命令介绍 1. 基本命令 ---" 替换 ": s www.ixdba.net 1.1 基本用法 e.g. sed 's/day/night/' new 该例子将文件 old 中的每一行第一次出现的 day 替换成 night, 将结果输出到文件 new s " 替换 " 命令 /../../ 分割符 (Delimiter) day 搜索字符串 night 替换字符串 其实 , 分割符 "/" 可以用别的符号代替 , 比如 ",", "|" 等 . e.g. sed 's///usr//local//bin///common//bin/'new 等价于 sed 's_/usr/local/bin_/common/bin_' new 显然 , 此时用 "_" 作分割符比 "/" 好得多 . 1.2 用 & 表示匹配的字符串 有时可能会想在匹配到的字符串周围或附近加上一些字符 . e.g. sed 's/abc/(abc)/' new 该例子在找到的 abc 前后加上括号 . 该例子还可以写成 sed 's/abc/(&)/' new 下面是更复杂的例子 : sed 's/[a-z]*/(&)/' new sed 's/[0-9]*/& &/' new 1.3 用 /1, /2, ..., /9 来表示匹配的字符串 e.g. sed 's//([a-z]*/)[0-9]*//1/' new 本例中 /1 就是指前面的 /([a-z]*/) sed 's//([a-z]*/) /([0-9]*/)//2 /1/' new 本例中 /2 和 /1 分别代表前面的 /([0-9]*/) 和 /([a-z]*/) /1, /2, ..., /9 也可以出现在搜索字符串中 e.g. sed 's//([a-z]*/) /1//1/' new 本例可以去除重复的由字母组成的词 1.4 " 替换 " 选项 1.4.1 /g 替换所有的 sed 默认只替换搜索字符串的第一次出现 , 利用 /g 可以替换搜索字符串所有 出现的地方 . 例如 , sed 's//([^ ]*/)/(&)/g' new 1.4.2 用 /1, /2, ... 来表明替换哪一次出现 e.g. sed 's/[^ ]*//2' new 可以从 /1 用到 /512 1.4.3 /p print 选项 当 sed 命令有 -n 选项时 , 该命令没用输出 . -n 配合 /p 选项后 , 如果该行确实发生了替换 , 则输出该行 , 否则不输出 . 1.4.4 /w filename 写到文件 filename 中 e.g. sed 's//([0-9]*/) /([a-z]*/)//2/w new' |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |