Chinaunix

标题: sed can not match use () [打印本页]

作者: u2001    时间: 2013-03-18 16:39
标题: sed can not match use ()
本帖最后由 u2001 于 2013-03-18 16:44 编辑

I want to find a field's (called formhash) value from html text , I use the following code , it prints the whole line.  why?
I guess it is due to  encode type or the length of one line, please give some help!
  1. sed -e 's/.*formhash" value="\([^"]*\)".*/\1/g'
复制代码

http.gz

12.02 KB, 下载次数: 8


作者: yestreenstars    时间: 2013-03-18 17:03
本帖最后由 yestreenstars 于 2013-03-18 17:26 编辑

I guess you need this.
  1. sed -n 's/.*formhash" value="\([^"]*\)".*/\1/p'
复制代码
The "-n" parameter can show you the match lines only,but it must work in with "p".
作者: u2001    时间: 2013-03-18 20:03
回复 2# yestreenstars

刚才没有中文输入法,我的意思是我只需要那个value值,可是出来的确是整个行,你可以把我的文件下载下去,然后试一下
我的那个表达式应该没有问题,因为处理较短数据还是可以的,我怀疑是不是行太长了或者编码有问题?

   
作者: yestreenstars    时间: 2013-03-18 20:07
@u2001
早说啊,打英文打得我累死了,而且还出现各种语法错误,哈哈~
你有没有试过我给你的那个命令?你的那个命令只实现了替换功能,所以所有行都会被打印出来。
作者: u2001    时间: 2013-03-18 20:15
回复 4# yestreenstars
试了,跟我的一样啊,出来的也是整行,我那个命令不是替换呀,那个圆括号是提取,测试其他的文本没问题呀

   
作者: yestreenstars    时间: 2013-03-18 20:27
你得到的结果是这样吗?
  1. [root@localhost ~]# sed -n 's/.*formhash" value="\([^"]*\)".*/\1/p' k
  2. 57e24614
  3. [root@localhost ~]#
复制代码

作者: u2001    时间: 2013-03-18 20:38
回复 6# yestreenstars

test@test-A8Sg:~$ sed -n 's/.*formhash" value="\([^"]*\)".*/\1/p' http | wc -w
2617
test@test-A8Sg:~$ cat http | wc -w
2741

我出来的内容还是很多,但是少了一些词,貌似就说那几个匹配的少了,我怀疑跟编码有关,我在公司的电脑Centos 64bit和我的
32bit的ubuntu都是这种情况
   
作者: yestreenstars    时间: 2013-03-18 20:44
回复 7# u2001


    那就不清楚了,我这里只出来一行,用Windows的记事本查找时也只查到一处匹配的。
作者: u2001    时间: 2013-03-18 20:51
回复 8# yestreenstars

我估计你是换行了,linux下只显示一行,换行之后再处理就没问题了

test@test-A8Sg:~$ wc -l http
1 http


   
作者: yestreenstars    时间: 2013-03-18 20:55
没换行:
  1. [root@localhost ~]# wc -l k
  2. 795 k
  3. [root@localhost ~]#
复制代码
注:我这里的k就是你的http。
作者: blackold    时间: 2013-03-19 06:19
回复 7# u2001


    可能是文件格式的问题,dos2unix




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