Chinaunix

标题: sed一例,求解 [打印本页]

作者: tanxin8651    时间: 2007-06-25 03:32
标题: sed一例,求解
cat 1
[执行]人物名(35479821) 完成任务*12345
[执行]人物名1(35479821) 完成任务*12345
[执行]人物名3(35479821) 完成任务*12345
[执行]人物名10(35479821) 完成任务*12345

我想把  人物名   这几个字提取出来。 假设有很多条记录, 其他都相同,就是人物名是不定的,可能是三个字也可能是四个或五个字。
我想取一个范围。
sed 's/\].*//g' 1
  得出的是
[执行35479821) 完成任务*12345

我想反过来 只提取出

人物名
人物名1
人物名3
人物名10


要怎么做呢。

我试了下

sed 's/[^\].*]//g' 1  这是不行的。

希望有人能看懂我的意思,给解答一下啊。
作者: tanxin8651    时间: 2007-06-25 03:43
刚刚想到了可以用多个管道
sed 's/\[.*\]//g' 1|sed 's/(.*//g'

有没有更简便的方法呢?不用管道。
作者: tanxin8651    时间: 2007-06-25 03:45
这么晚了,肯定是没人了,呵呵

希望早起的高手给看看咯。
作者: __lxmxn__    时间: 2007-06-25 06:38
sed
  1. sed 's/\[.*\]\(.*\)(.*$/\1/' urfile
复制代码


awk
  1. awk -F'[](]' '{print $2}' urfile
复制代码

作者: tommy2004    时间: 2007-06-25 08:43
原帖由 __lxmxn__ 于 2007-6-25 06:38 发表
sed
  1. sed 's/\[.*\]\(.*\)(.*$/\1/' urfile
复制代码


awk
  1. awk -F'[](]' '{print $2}' urfile
复制代码



.*和1是什么意思呢??
作者: tanxin8651    时间: 2007-06-25 11:11
sed 's/\[.*\]\(.*\)(.*$/\1/' urfile

能不能解释下呢。
是把一行分成三段? []之间  ()之间  和  (.*
\1 代表什么意思呢。
作者: zongyaotang    时间: 2007-06-25 11:46
意思是把"]"前的删除,"("后的删除
sed -e "s/^[^\]*\]//;s/[(].*$//" urfile
作者: __lxmxn__    时间: 2007-06-26 00:07
标题: 回复 5楼 tommy2004 的帖子
.* 代表任意数目的任意字符
\1 表示对前面第一个\( \)内的字符的引用.
作者: __lxmxn__    时间: 2007-06-26 00:07
原帖由 zongyaotang 于 2007-6-25 11:46 发表
意思是把"]"前的删除,"("后的删除
sed -e "s/^[^\]*\]//;s/[(].*$//" urfile

有必要用[^\]吗?

我觉得没有必要。
作者: panlm    时间: 2007-06-26 08:43
sed:
cat file |sed 's/.*]\([^(]\+\)(.*/\1/'

awk:
cat file  |awk -F'[](]' '{print $2}'




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2