sed学习笔记(五)--不常用的命令
时间:2007-12-20 来源:kinwin
y/source-chars/dest-chars/ source char对应的替换为dest char.source char和dest char 的数目在de-escape后数目相等。 |
a\text 可接受地址或地址范围。用来在当前行后插入一行(Append text),执行时是在输出 当前pattern space和读入下一行之间输出a后文本 注:默认是以\开始文本。(GNU扩展)当a后未跟\,则以第一个非空字符作为文本的开始(同样适用于i和c) 例: $ cat newkinwin said:"I'm kinwin" kinwin@ustc-king:~ $ sed '/said/a school' new kinwin said:"I'm school kinwin" kinwin@ustc-king:~ $ sed '/said/a\ school' new kinwin said:"I'm school kinwin" |
i\text 在当前行前插入text。执行顺序: 执行到这个命令是立刻输出text |
c\text 删除行或行范围的文本,然后用text替换行或行范围的最后一行。若未指明地址范围,则对每一行分别执行c操作。
注意a,i和c在处理二地址范围时的不同。 |
= 打印当前行号 |
l n 输出当前pattern space内容 non-printable characters (and the \ character) are printed in C-style escaped form分割长行,行的字符数由n指定(GNU扩展),若n=0,表示不折叠行,默认为选项中-l n的指定 |
|
r filename 执行顺序同a,从文件中获取内容append,若文件不存在,则认为文件为空,不输出错误信息。GNU可指定文件为/dev/stdin |
w filename 将pattern space内容写入file。注意实现上sed在读入第一行文本前会创造或覆盖file,然后file一直打开,以后的w不会重新打开和关闭这个文件。
可以尝试一下:sed '/none/w new' kin,如果none无匹配,new也创造了,只是内容为空 |
D 删除pattern space的第一行内容。如果pattern space中还有内容,则以当前的pattern space开始下一循环,而不读入新的一行。 |
N 读入下一行append到pattern space,如果无下一行,sed退出 |
P 打印pattern space的第一行 |
h 用当前pattern space的内容覆盖hold space |
H 将当前pattern space的内容append到hold space
注:小写字母表覆盖,大写一般表追加。下不详述 |
g,G hold space ->pattern space |
x hold space <-> pattern space |
: label 作标记,便于跳转 |
b label 直接跳到label处,相当于goto.若label为空,则直接跳到最后。输出pspace,开始下一循环. |
t label 前面的s替换成功则跳转,否则不跳转。若label为空,则跳到最后。 |
e [command] e后未跟command时,shell把patten space中的内容作为命令执行,输出替换pattern space。若e后跟command,shell执行command,结果执行i操作。 $ cat newdate uname -s kinwin@ustc-king:~ $ sed 'e' new 2007年 12月 20日 星期四 15:06:20 CST Linux $ sed 'e echo "hello"' new hello date hello uname -s
|
Q [exit_code] 同q,只是退出时不打印当前pattern space的内容 |
R filename 同r filename,区别:r是一次读入所有文本行append,而R是一次只读入一行。 |
T lable 和t label相反,s不成功时跳转 |
W filename 同w,区别:W只输入pattern space中的第一行 |