日期:2014-05-16  浏览次数:20817 次

Shell sed命令 如何用正则表达式定位
问题有4个,可能需要浪费你一点宝贵的时间。谢谢你的帮助。

输入文件是ps auwx的内容名字origin.txt,当前用户为tmm_dev

1.如何在sed 脚本使用变量。
输入文件是ps auwx的内容,当前用户为tmm_dev
#! /bin/sed –f
/^$USR/p     --->    打印出所有用户的内容
2.如何在sed中使用正则表达式进行精确查找
#! /bin/sed –f
/\<tmm_dev\>/p    ---->输出仍然为所有用户origin

3.如何实现在指定位置插入文本,并且写入到文本中。
sed –e ‘/tmm_dev/a ok’ –e ‘p’ –e ‘w output3’ origin.txt
目的是在tmm_dev 后追加ok 字符串,实际情况是:
   a.在打印的时候显示了OK字符串,但是output3中仍然为原来的字符串
    b.如何将这个命令转换为sed脚本。

4.如何查询包含两个模式的行。
我用
sed -n '/tmm_dev/10678/p' origin.txt
命令不能运行,提示:char 10: unknow command:'1'

------解决方案--------------------
没有效果是什么意思?
------解决方案--------------------
如何使用sed脚本来完成,我不清楚。我使用单行命令完成了所想要的结果。不知道我的理解是否符合?
准备工作:建一文件 origin.txt  文件内容 ps  auwx   添加可执行权限 chmod +x origin.txt
1、使用变量USER来打印当前用户的内容
   ./origin.txt 
------解决方案--------------------
 sed -n /^USER/p
2、使用精确查找来打印当前用户的内容
   ./origin.txt 
------解决方案--------------------
 sed -n /^tmm_dev/p
3、如何实现在指定位置插入文本,并且写入到文本中
   ./origin.txt 
------解决方案--------------------
 sed -n -e '/tmm_dev/i\ ok' -e 'p' 
------解决方案--------------------
 tee out
   ./origin.txt 
------解决方案--------------------
 sed -n -e '/tmm_dev/a\ ok' -e 'p' > out
 但是这两种方法都只是将ok插入到匹配模式所在行的前一行或者后一行
 我个人觉得,若是想要在匹配模式后添加字符串,最好的方式是使用
   ./origin.txt 
------解决方案--------------------
 sed -n -e 's/npp/npp OK/g' -e 'p' 
------解决方案--------------------
tee out
4、同时有两个模式,不知道,但是我可以先得到含有一个模式的行,在此基础上含有第二个模式的行,这样可以得到结果。目地达到。完成!
    sed -n '/a/p' dd.txt 
------解决方案--------------------
 sed -n '/b/p'
------解决方案--------------------
1.如何在sed 脚本使用变量。
输入文件是ps auwx的内容,当前用户为tmm_dev
#! /bin/sed –f
/^$USR/p     --->    打印出所有用户的内容
还是用#!/bin/bash的方式解析比较好
然后是一些sed "sed command"命令,直接使用就够了。确保USR已经export到环境当中。

2.如何在sed中使用正则表达式进行精确查找
#! /bin/sed –f
/\<tmm_dev\>/p    ---->输出仍然为所有用户origin
不要忘记了-n参数

3.如何实现在指定位置插入文本,并且写入到文本中。
sed –e ‘/tmm_dev/a ok’ –e ‘p’ –e ‘w output3’ origin.txt
目的是在tmm_dev 后追加ok 字符串,实际情况是:
   a.在打印的时候显示了OK字符串,但是output3中仍然为原来的字符串
    b.如何将这个命令转换为sed脚本。

这个用i和w命令实现。

4.如何查询包含两个模式的行。
我用
sed -n '/tmm_dev/10678/p'