学习手册 emacs info
1。
sed 一个流编辑器。
它能在一个文件或管道上进行基本的文本操作。
2。
如何调用sed?
sed OPTIONS... [SCRIPT] [INPUTFILE...]
没有说明INPUTFILE时,或者INPUTFILE是“-”,输入流为标准输入
命令行选项(OPTIONS)
--version
--help
-n 或者--quiet或者--silent
取消自动打印功能,只打印 p 命令所指定的
-i[SUFFIX]或者--in-place[=SUFFIX]
原地编辑,将编辑结果写回源文件,SUFFIX指明源文件如何备份,缺少的话就不备份
-l N或者--line-length=N指定较长的字符行如何回折[wrap],默认是70个字符
--posix
遵从posix标准
-r或者--regexp-extended
使用拓展的正则表达式,即'egrep'命令接受的
-s或者--seperate
默认情况下,sed将所有输入文件当作一个连续的流,这个选项允许用户将他们看作分立的文件
-u或者--unbuffered
-e SCRIPT或者--expression=SCRIPT
将命令添加到命令集中,即增加一个命令操作
-f SCRIPT-FILE或者--file=SCRIPT-FILE
将SCRIPT-FILE中的命令添加到命令集中
3。sed programs
sed如何工作?
sed维持这两个缓存 active _pattern_ space 和 auxiliary _hold_ space。开始的时候他们都是空的。
sed重复着一个工作环:首先,从输入流中读入一行,去掉尾端的换行符,并把它放到pattern space里面。
然后执行相应的命令集。命令关联着条件,只有条件满足,才能执行命令。当执行完最后一个命令时,如果没有-n选项,pattern space里的内容会打印到输出流,并把开始时去掉的换行符添上。然后开始下一个循环,读入下一行。
sed如何确定要处理的范围?或者说,寻址?
寻址方式:
每种寻址方式都确定一系列行的范围。在寻址串后面跟一个感叹号!表示反选。
各种寻址方式:
NUMBER
直接指定第NUMBER行
FIRST~STEP
从第FIRST行开始,每隔STEP行选取一行。
$
匹配当前文件的最后一行
/REGEXP/ /%REGEXP%
选择匹配REGEXP正则表达式的行
/REGEXP/I /REGXP/M
I表示忽略大小写, M表示多行。
正则表达式总览:
普通字符对应它们自身
*匹配零或多个它前面的个体
'/+' 和*差不多,但至少匹配一次
'/?' 和*差不多,但匹配零或着一次
'/{I/}' 匹配I次
'/{I,J/}' 匹配I到J次
'/{I,/}'匹配至少I次
'/(REGEXP/)' 将REGEXP作为一个整体
'.' 匹配任何字符
'^' 匹配行开始
'$' 匹配行结束
'[LIST]'
'[^LIST]'
匹配LIST中的任意字符,加上^表示匹配不是LIST中的任意字符
‘REGEXP/|REGEXP‘匹配至少其中一个表达式
‘REGEXP1REGEXP2’匹配两个表达式
’/DIGIT‘ 向前引用第DIGIT个括号表达式
'/n' 匹配换行符
'/CHAR' 字符转义: '$', '*', '.', '[', '/', '^'
例子:
‘abcdef' 匹配 'abcdef'
'a*b' 匹配以b结尾的字符串,前面有零或多个a
'a/?b' 匹配 'b' 或者 'ab'
'//$'匹配以右斜线结尾的字符串
'^/(.*/)/n/1$' 匹配一个字符串,该字符串包含两个相等的被换行符分割的字串
经常使用的命令
'#' 注释一行
'q [EXIT-CODE] 退出
'd' 立即删除pattern aspace
'p' 打印pattern space
'n'
'{ COMMANDS } 命令集
s命令
完整格式
s/REGEXP/REPLACEMENT/FLAGS
其中/可由其它字符代替,该字符在REGEXP或者REPLACEMENT中必须转义
REPLACEMENT可以使用/N引用REGEXP匹配的第N部分
REPLACEMENT中
/L 将字符转化为小写,知道遇到 /E 或者/U
/l 将后面一个字符小写
/U 将字符转化为小写,知道遇到 /E 或者/L
/u 将后面一个字符大写
FLAGS
g 应用于所有的匹配,不仅仅是默认的第一个
NUMBER 应用第NUMBER个
p 打印出来
I i 大小写不敏感
m M 多行匹配