一. 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