分类:
2011-06-13 23:15:35
$ sed '/two/ d' sample_one one 1 three 1 one 1 three 1 $ |
$ sed '1,3 d' sample_one one 1 two 1 two 1 three 1 $ |
$ sed '/two/ s/1/2/; /three/ s/1/3/; /^$/ d' sample_one one 1 two 1 three 1 one 1 two 2 two 2 three 1 $ |
$ sed '$a\ > This is where we stop\ > the test' sample_one one 1 two 1 three 1 one 1 two 1 two 1 three 1 This is where we stop the test $ |
$ sed '3a\ > This is where we stop\ > the test' sample_one one 1 two 1 three 1 This is where we stop the test one 1 two 1 two 1 three 1 $ |
$ sed '3i\ > This is where we stop\ > the test' sample_one one 1 two 1 This is where we stop the test three 1 one 1 two 1 two 1 three 1 $ |
$ sed ' > /two/ s/1/2/ > /three/ s/1/3/ > 1,3 w sample_three' sample_one one 1 two 2 three 3 one 1 two 2 two 2 three 3 $ $ cat sample_three one 1 two 2 three 3 $ |
$ sed '/two/ c\ > We are no longer using two' sample_one one 1 We are no longer using two three 1 one 1 We are no longer using two We are no longer using two three 1 $ |
$ sed '/two/ d' sample_one one 1 three 1 one 1 three 1 $ |
$ sed '/two/ !d' sample_one two 1 two 1 two 1 $ |
#mcd.ksh for I in $* do echo Old McDonald had a $I echo E-I, E-I-O done |
#sublist / a a/ s/ a / an / / a e/ s/ a / an / /a i/ s / a / an / /a o/ s/ a / an / /a u/ s/ a / an / |
$ sed ' > /two/ s/1/2/ > /three/ s/1/3/ > 5q' sample_one one 1 two 2 three 3 one 1 two 2 $ |
$ sed ' > /two/ s/1/2/ > /three/ s/1/3/ > /three/q' sample_one one 1 two 2 three 3 $ |
$ sed ' > /two/ s/two/three/ > /three/ s/three/four/' sample_one one 1 four 1 four 1 one 1 four 1 four 1 four 1 $ |
$ sed ' > /three/ s/three/four/ > /two/ s/two/three/' sample_one one 1 three 1 four 1 one 1 three 1 three 1 four 1 $ |
这非常有效,因为 "three" 值在 "two" 变成 "three" 之前得到修改。
标签和注释
可以在 sed 脚本文件中放置标签,这样一旦文件变得庞大,可以更容易地说明正在发生的事情。存在各种各样与这些标签相关的命令,它们包括:
接下来的步骤
访问并收藏 Linux 技术中心
阅读 Dale Dougherty 和 Arnold Robbins 的著作 sed & awk, 2nd Edition (O'Reilly & Associates 出版社)。
: 冒号表示一个标签名称。例如:
:HERE
以冒号开始的标签可以由 "b" 和 "t" 命令处理。
b {label} 充当 "goto" 语句的作用,将处理发送至前面有一个冒号的标签。例如,
b HERE
将处理发送给行
:HERE
如果紧跟 b 之后没有指定任何标签,则处理转至脚本文件的末尾。
t {label} 只要自上次输入行或执行一次 "t" 命令以来进行了替换操作,就转至该标签。和 "b" 一样,如果没有给定标签名,则处理转至脚本文件的末尾。
# 符号作为一行的第一个字符将使整行被当作注释处理。注释行与标签不同,不能使用 b 或 t 命令来转到注释行上。
进一步的研究
sed 实用工具是 Linux
管理员拥有的最强大和灵活的工具之一。虽然本文覆盖了许多基础知识,但对于这一具有丰富功能的工具仅是蜻蜓点水。关于更多信息,最好的来源之一是
Dale Dougherty 和 Arnold Robbins 的著作 sed & awk,现在从 O'Reilly &
Associates 出版社推出了其第二版(参加“接下来的步骤”)。该出版社还推出了一本可以随身携带的袖珍参考
‘s / \ . $ / / g’ 删除以句点结尾行
‘-e /abcd/d’ 删除包含a b c d的行
‘s / [ ] [ ] [ ] * / [ ] / g’ 删除一个以上空格,用一个空格代替
‘s / ^ [ ] [ ] * / / g’ 删除行首空格
‘s / \ . [ ] [ ] * / [ ] / g’ 删除句点后跟两个或更多空格,代之以一个空格
‘/ ^ $ / d’ 删除空行
‘s / ^ . / / g’ 删除第一个字符
‘s /CO L \ ( . . . \ ) / / g’ 删除紧跟C O L的后三个字母
‘s / ^ \ / / / g’ 从路径中删除第一个\
‘s / [ ] / [ ] / / g’ 删除所有空格并用t a b键替代
‘S / ^ [ ] / / g’ 删除行首所有t a b键
‘s / [ ] * / / g’ 删除所有t a b键