一. sed 命令行格式
一般形式: sed [ 选项 ] sed 命令 输入文件
二. sed 脚本文件格式
sed [ 选项 ] –f sed 脚本文件 输入文件
三. 第一行具有 sed 命令解释器的 sed 脚本文件格式
sed 脚本文件 [ 选项 ] 输入文件
1. sed 在文件中查询文本的方式
方式 |
含义 | |
x |
X 为行号,如 1 | |
x,y |
表示范围从 x 到 y | |
/pattern/ |
查询包含模式的行 | |
/pattern/ pattern / |
查询包含两个模式的行 | |
pattern/,x |
在给定行号中,查询包含模式的行 | |
x,/ pattern / |
通过行号和模式查询匹配模式行 | |
x,y! |
查询不包含指定行号 x 和 y 的行 | |
2. sed 编辑命令
命令 |
含义 | |
P |
打印匹配行 | |
= |
显示文件行号 | |
a/ |
在定位行号后附加新文本信息 | |
i/ |
在定位行号后插入新文本信息 | |
d |
删除低位行 | |
c/ |
用新文本替换定位文本 | |
s |
适用替换模式替换相应模式 | |
r |
从另外一个文件中读文本 | |
w |
写文本到一个文件 | |
q |
第一个模式匹配完成后退出或立即退出 | |
l |
显示与八进制 ASCII 代码等价的控制字符 | |
{} |
在定位行执行的命令组 | |
n |
从另一个文件中读文本下移行,并附加在下一行 | |
g |
将模式 2 粘贴到 /pattern n/ | |
y |
传送字符 | |
n |
延续到下一输入行:允许跨行的模式匹配语句 | |
3. sed 编程举例
命令 |
例 |
含义 |
p x |
$ sed -n ‘2p’ quote.txt |
打印第二行, $ 表示最后一行 |
p x,y |
$ sed -n ‘1,3p’ quote.txt |
打印 1 到 3 行 |
/pattern/ |
$ sed -n ‘/Neave/’p quote.txt |
匹配单词 Neave ,并打印此行 |
x,/pattern/ |
$ sed -n ‘4,/Neave/’p quote.txt |
在第四行查 Neave ,并打印此行 |
//$/ |
$ sed -n ‘//$/’p quote.txt |
匹配元字符 |
1,$p |
$ sed -n ‘1,$p/’p quote.txt |
显示整个文件, $ 表示最后一行 |
/.*ing/ |
$ sed -n ‘/.*ing/’p quote.txt |
匹配任意字母,后跟任意字母的 0 次或者多次重复 |
/pattern/= |
$ sed -e ‘/music/=’ quote.txt |
结果将打印出匹配的行号和整个文件 |
|
$ sed -n ‘/music/=’ quote.txt |
结果只打印出匹配的行号 |
a/ |
创建 sed 脚本 append.sed #!/bin/sed –f /compay/ a/ Then suddenly it happened |
命令为 $ ./append.sed quote.txt 执行结果是在 quote.txt 文件找到 compay , c/ 表示附加操作,然后在其后附加文件 Then suddenly it happened |
i/ |
创建 sed 脚本 #!/bin/sed –f 4 i/ Then suddenly it happened |
在行号 4 之前插入文本信息 |
c/ |
创建 sed 脚本 #!/bin/sed –f /honeysuckle/ c/ The office band played well |
执行结果是在 quote.txt 文件找到 honeysuckle , a/ 表示修改操作,将 The office band played well 替换 honeysuckle 所在的整行文本。 |
d |
$ sed ‘1,3d’ quote.txt |
删除 1 到 3 行 |
|
$ sed ‘/Neave/d’ quote.txt |
删除 Neave 所在行 |
s |
$ sed ‘s/night/NIGHT/’ quote.txt |
查询 night 用 NIGHT 替换,只替换第一次匹配 |
s///g |
$ sed ‘s/night/NIGHT/g’ quote.txt |
全局替换 |
s///w |
$ sed ‘s/night/NIGHT/w sed.out’ quote.txt |
将 NIGHT 替换 night 的结果保存到 sed.out |
s// &/ |
$ sed ‘s/night/NIGHT &/p’ quote.txt |
查询模式 nigiht 并保存,将替换文本 NIGHT 放在被替换模式之前, NIGHT 和 & 换位置,结果 NIGHT 放在被替换模式之后 |
保存 sed 结果 |
$ sed ‘/Neave/ w dht’ quote.txt |
将查询 Neave 的匹配结果行,写入文件 dht 中。 |
从文件中读文本 |
$ sed ‘/Neave/r sedex.txt’ quote.txt |
在 quote.txt 中匹配模式 Neave , r 表示 sed 将从另一个文件中读文本,读取到的文本放在匹配模式 Neave 后。 |
q |
$ sed ‘/.a.*/q’ quote.txt |
查询首次出现模式,然后退出 |
l |
$ sed -n ‘1 ,$l ’ quote.txt |
表示从 1 到 $ 最后一行,列出整个文件的控制字符 |
从 shell 向 sed 传值 |
$NAME=”It’s a go situation” $REPLACE=”GO” $echo $NAME | sed “s/go/$REPLSCE/g” It’s a GO situation
|
Sed 命令用的是双引号 ”” |
|
|
|
4. 一行名命令集
命令集 |
含义 |
‘s///.$//g’ |
删除以句点结尾行 |
‘-e /abcd/d’ |
删除包含 abcd 的行 |
‘s/[][][]*/[]/g’ |
删除一个以上空格,用一个空格代替 |
‘s/^[][]*/[]/g’ |
删除行首空格 |
‘s//.[][]*/[]/g’ |
删除句点后跟两个或更多空格,用一个空格代替 |
‘s/^$//g’ |
删除空行 |
‘s/^.//g’ |
删除第一个字符 |
‘s/COL/(…/)//g’ |
删除 COL 以及紧跟 COL 的后三个字符 |
s/^////g |
从路径中删除第一个 / |
追加文本 |
$ echo ”A B” | sed ‘s/A/ & C/g’ 结果 A C B |
删除首字符 |
$ echo “abc.doc” | sed s/^.//g 结果 bc.doc |
增加扩展名 |
$ echo “abc” | sed s/$/.doc/g 结果 abc.doc |
sed 在 shell 中的应用
sed 用于删除 所有文件的空行
#!/bin/sh
#forsed
for files in `ls fo*`
do
sed -e "/^$/d" $files >$files.hold
mv $files.hold $files
done