g 在同一行内执行所有可能的替换
p 如果替换操作完成的话,输出这一行
w file 将当前编辑文件输出到 file 中
【例2-14】sed命令示例(以a.txt为输入文件)。
sed '/The/d' a.txt 删除所有含字符串The的行
sed '/[0-9]/d' a.txt 删除所有含有数字的行
sed '/[a-z]/!d' a.txt 输出所有含小写字母的行(不删除)
sed '1,10d' a.txt 删除第1行到第10行
sed '5,$d' a.txt 输出第1行到第4行(不删除)
sed '/^#/,$d' a.txt 删除从第1个shell注释行到最后一行
sed '/\/\*/d' a.txt 删除含/*的行(C语言注释行)
sed '/^$/d' a.txt 删除所有空行
sed '/^#/s/Q/DFF/g' a.txt 以#开头的行将所有的Q替换为DFF
sed ‘s/$/\\/’ a.txt 在每个行尾都加上反斜杠 \
sed 's/^/\t/' a.txt 在每行前插入一个制表符
sed 's/if□\[/if□(/g' a.txt 将“if□[”替换为“if□(”
sed 's/printf(/f&stderr,/' a.txt 将“printf(”改为“fprintf(stderr,”
【例2-15】(课本例2-22)改变文件后缀示例。要求将当前目录下所有具有某个后缀的文件
全部重新命名,改为另一个后缀。为简单起见,将后缀为“.a”的文件改为后缀为“.b”的文件。
例如,执行命令“ls *.a”,显示当前命令下的文件为:
abc.a
de.a
xyz.a
如果执行以下命令:
mv abc.a abc.b
mv de.a de.b
mv zxy.a zxy.b
可以改变文件的后缀,获得以下文件:
abc.b
de.b
zxy.b
这样的操作属于手动执行 shell 命令。利用 sed 命令,编写 shell 程序(脚本文件),可以
实现非交互操作(batch program,批处理程序)。这是 UNIX 系统文件管理的一种基本操作。
以下讨论和介绍几种利用 sed 命令编程的方案。
⊙方案1
编写 shell 文件 cha2b_1,内容为:
ls□*.a□|□sed□'s/\.a$//' > a.tmp
for□i□in□`cat a.tmp`
do
mv□$i.a□$i.b
done
rm a.tmp
改变后缀的操作为:
$ cha2b_1
ls *.a
abc.a
de.a
xyz.a
sed 's/\.a$//'
abc
de
xyz
文件a.tmp
sed命令命令
for□i□in□`cat□a.tmp`
do
mv□$i.a□$i.b
done
abc.b
de.b
xyz.b
shell命令
文件列表
(中间数据)
文件列表
(运行结果)
⊙方案2
如果不希望产生临时文件 a.tmp ,可以把 ls 命令和 sed 命令产生的结果赋给一个变量,
评论0
最新资源