LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2349|回复: 8

怎么替换行中的某一不确定字段??

[复制链接]
发表于 2003-2-14 11:12:58 | 显示全部楼层 |阅读模式
现有一文本文件.内容如下:
/root/text        #mysql
#KILL
/root/big      #you
/root/ghg

/root/lll

'用Sed命令.我可以删除"#KILL"和空行.
但是在/root/text后面的#mysql和/root/big后面的#you这两个字段我怎么删除呢??
#mysql和#you是不确定的字段.了就是说#后面可以跟任意的字段名称,而不一定是mysql和you
感觉好像SED就是用来进行行操作的.
发表于 2003-2-14 12:11:39 | 显示全部楼层
  1. javalee//home/javalee/x>cat k
  2. /root/text #mysql
  3. #KILL
  4. /root/big #you
  5. /root/ghg
  6. /root/lll
  7. javalee//home/javalee/x>sed -n 's/[#\][a-z]*[a-z$]//p' k
  8. /root/text
  9. /root/big
复制代码
 楼主| 发表于 2003-2-14 14:57:28 | 显示全部楼层
谢谢老大.但是如果#后面的是数字怎么办??我现在只能另起一行.再用一次SED命令把他解决了.
还有.为什么我用VI 编辑一个文本后.再用
sed -n 's/[#\][a-z]*[a-z$]//p' k
执行一遍后.我再用VI打开这个文本.可里面的内容却没有变啊??
可在SED好以后出现的命令行中我看到的是已经改变的结果.这是为什么啊.
发表于 2003-2-14 16:17:57 | 显示全部楼层
建议你看看本版关于正则表达式的帖子,sed是个流编辑器,经过sed命令处理的数据都保存在缓冲区里,你用vi编辑的是保存在磁盘上的数据,当然你可以 > 重定向到一个文件里.
 楼主| 发表于 2003-2-15 21:20:39 | 显示全部楼层
谢谢楼主~再三感谢哦~
但是还有一个小变数的问题。就是#后面是不确定的数。而用[a-z]
只能查出字母子。那要是#897xy89ZZZXX
怎么处理呢?^_^
楼主我刚开始学SHELL。问的问题有些白吃了~不要骂我~*_*
发表于 2003-2-15 22:56:14 | 显示全部楼层
那可以用grep/sed/awk组合命令将#号作为一个搜索模式,再作处理
具体的建议你看看本版[置顶]或[精华]的帖子,里面有关于这方面详细的介绍,
你说的
#897xy89ZZZXX
可以用简单的:
sed -n 's/[#\][a-zA-Z0-9]*[a-zA-Z0-9$]//p'
具体情况具体分析;)
 楼主| 发表于 2003-2-16 14:24:43 | 显示全部楼层
哇~今天特地去上海书城想找一些关于SHELL的书回来补充一下。结果。。。。找来找去只找到两本。晕哪。这两本我都没买。看看里面内容全拿来骗钱的。
 楼主| 发表于 2003-2-17 11:18:10 | 显示全部楼层
汗~-_-~!
sed -n '/[#\][.]*[.$]//p'
就可以搞定了.命令可能有点不对.但思路就是这样.[.]*是通配符.我现在LINUX因为我改了一个系统文件.把他改坏掉了要重新安装了.所以没办法试.楼主你试试看吗~
我们以后多切磋一下,哦~应该是楼主你多教教我哦~^_^
发表于 2003-2-17 11:51:08 | 显示全部楼层
直接用这个就可以了:

sed -e 's/[:#:].*//'
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表