sed:处理报文输出

处理报文输出
当从数据库中执行语句输出时,一旦有了输出结果,脚本即可做进一步处理。通常先做一些整理,下面是一个s q l查询结果。


[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ cat data.txt
Database Size(MB) DataCreated
-----------------------------
GOSOUTH 2244 12/11/97
TRISUD 5632 8/9/99
(2 rows affected)

为了使用上述输出信息做进一步自动处理,需要知道所存数据库名称,为此需执行以下
操作:
1) 使用s / - * / / g删除横线- - - - - -。
2) 使用/ ^ $ / d删除空行。
3) 使用$ d删除最后一行
4) 使用1 d删除第一行。
5) 使用awk {print $1}打印第一列。
命令如下,这里使用了c a t,并管道传送结果到s e d命令。


[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ cat data.txt |sed 's/--*/ /g' | sed '/^$/d' | sed '$d' | sed '1d' | awk '{print $1}'
GOSOUTH
TRISUD

附加文本
当帐户完成设置一个文件时,帐号管理者可能要在文件中每个帐号后面加一段文字,下面是此类文件的一部分:


[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ cat ok.txt
AC456
AC492169
AC9967
AC88345

任务是在每一行末尾加一个字符串‘ p a s s e d’。
使用$命令修改各域会使工作相对容易些。首先需要匹配至少两个或更多的数字重复出现,这样将所有的帐号加进匹配模式。


[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ sed 's/[0-9][0-9]*/& Passed/g' ok.txt
AC456 Passed
AC492169 Passed
AC9967 Passed
AC88345 Passed

从shell向sed传值
要从命令行中向s e d传值,值得注意的是用双引号,否则功能不执行。


[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ NAME="It's a go situation"
[sam@chenwy sam]$ REPLACE="GO"
[sam@chenwy sam]$ echo $NAME | sed "s/go/$REPLACE/g"
It's a GO situation

从sed输出中设置shell变量
从s e d输出中设置s h e l l变量是一个简单的替换过程。运用上面的例子,创建s h e l l变量N E W- N A M E,保存上述s e d例子的输出结果。


[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ NAME="It's a go situation"
[sam@chenwy sam]$ REPLACE="GO"
[sam@chenwy sam]$ NEW_NAME=`echo $NAME | sed "s/go/$REPLACE/g"`
[sam@chenwy sam]$ echo $NEW_NAME
It's a GO situation

这里的`是键盘左上角那个`


下面是一些一行命令集。([ ]表示空格, [ ]表示t a b键)


QUOTE:
‘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键

1. 删除路径名第一个\符号
将当前工作目录返回给s e d,删除第一个\:


[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ echo $PWD |sed 's/^\///g'
usr/sam

2. 追加/插入文本
将"Mr Wi l l i s "字串返回给s e d并在M r后而追加" B r u c e "。


[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ echo "Mr Willis" |sed 's/Mr /& Bruce/g'
Mr BruceWillis

3. 删除首字符
s e d删除字符串“a c c o u n t s . d o c”首字符。


[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ echo "accounts.doc" |sed 's/^.//g'
ccounts.doc

4. 删除文件扩展名
s e d删除“a c c o u n t s . d o c”文件扩展名。


[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ echo "accounts.doc"|sed 's/.doc//g'
accounts

5. 增加文件扩展名
s e d附加字符串“. d o c”到字符串“a c c o u n t s”。


[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ echo "accounts"|sed 's/$/.doc/g'
accounts.doc

6. 替换字符系列
如果变量x含有下列字符串:


[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ x="Department+playroll&Building G"
[sam@chenwy sam]$ echo $x
Department+playroll&Building G

如果要加入of,located,并去掉+,&实现下列转换:


[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ echo $x |sed 's/\+/ of /g' |sed 's/\&/ Located at /g'
Department of playroll Located at Building G

把+用 of 替换,&用located at 替换
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值