文件或字符串中文本。下面运用前面学过的知识讲述这一点。
使用s e d实现的一个重要功能是在另一个系统中下载的文件中剔除控制字符。
下面是传送过来的文件( d o s . t x t)的部分脚本。必须去除所有可疑字符,以便于帐号所有
者使用文件。
任务1。删除所有的#字符很容易,可以使用全局替换命令。这里用一个空格替换两个或
更多的#符号。
[root@localhost huangcd]# cat dos.txt
12332##DISO##45.12
00332##LPSO##23.11
01299##USPD##34.46
[root@localhost huangcd]# sed 's/##*//g' dos.txt
12332DISO45.12
00332LPSO23.11
01299USPD34.46
任务2。删除所有行首的0。使用^符号表示模式从行首开始, ^ 0 *表示行首任意个0。模式
s / ^ 0 * / / g设置替换部分为空,即为删除模式,正是要求所在。
[root@localhost huangcd]# sed 's/^0*//g' dos.txt
12332##DISO##45.12
332##LPSO##23.11
1299##USPD##34.46
[root@localhost huangcd]# cat dos.txt |sed 's/^0*//g' |sed 's/##*//g'
12332DISO45.12
332LPSO23.11
1299USPD34.46
当从数据库中执行语句输出时,一旦有了输出结果,脚本即可做进一步处理。通常先做
一些整理,下面是一个s q l查询结果。
为了使用上述输出信息做进一步自动处理,需要知道所存数据库名称,为此需执行以下
操作:
1) 使用s / - * / / g删除横线- - - - - -。
2) 使用/ ^ $ / d删除空行。
3) 使用$ d删除最后一行
4) 使用1 d删除第一行。
5) 使用awk {print $1}打印第一列。
命令如下,这里使用了c a t,并管道传送结果到s e d命令。
[root@localhost huangcd]# cat sql.txt
Database Size(MB) Date Created
-------------------------------------
GOSOUTH 2244 12/11/97
TRISUD 5632 8/9/99
(2 row affected)
[root@localhost huangcd]# cat sql.txt|sed 's/-*//g'|sed '/^$/d'|sed '$d'|sed '1d'|awk '{print $1}'
GOSOUTH
TRISUD
当帐户完成设置一个文件时,帐号管理者可能要在文件中每个帐号后面加一段文字,下
面是此类文件的一部分:
任务是在每一行末尾加一个字符串‘ p a s s e d’。
使用$命令修改各域会使工作相对容易些。首先需要匹配至少两个或更多的数字重复出现,
这样将所有的帐号加进匹配模式。
[root@localhost huangcd]# cat ok.txt
AC456
AC492169
AC9967
AC88345
[root@localhost huangcd]# sed 's/[0-9][0-9]*/& passed/g' ok.txt
AC456 passed
AC492169 passed
AC9967 passed
AC88345 passed
要从命令行中向s e d传值,值得注意的是用双引号,否则功能不执行。
[root@localhost huangcd]# NAME="It's a go situation"
[root@localhost huangcd]# REPLACE="GO"
[root@localhost huangcd]# echo $NAME|sed "s/go/$REPLACE/g"
It's a GO situation
将当前工作目录返回给s e d,删除第一个\:
[root@localhost huangcd]# echo $PWD|sed 's/^\///g'
home/huangcd
[root@localhost huangcd]# echo $PWD
/home/huangcd
将"Mr Wi l l i s "字串返回给s e d并在M r后而追加" B r u c e "。
[root@localhost huangcd]# echo "Mr Willis" | sed 's/Mr/& Bruce/g'
Mr Bruce Willis
s e d删除字符串“a c c o u n t s . d o c”首字符。
[root@localhost huangcd]# echo "accounts.doc" |sed 's/^.//g'
ccounts.doc