Board logo

标题: [问题求助] [已解决]文件不分行sed如何取出8-9位的数字字符串? [打印本页]

作者: hansom    时间: 2011-10-13 15:57     标题: [已解决]文件不分行sed如何取出8-9位的数字字符串?

本帖最后由 hansom 于 2011-10-18 13:56 编辑

57047&tpl=w&username=2940253&tpl=w&navftype
57047&tpl=w&username=27949941&tpl=w&navftype
57047&tpl=w&username=2340243&tpl=w&navftype
57047&tpl=w&username=27934233&tpl=w&navftype

上面是1.txt中的代码示例,为方便看我把代码分行了,实际中的是不分行的。
如何取出usermane=后面的8-9位数字?
这样行不?
sed -n /*username=\(.*\)&tpl*/\ 1.txt
好像测试通不过。
作者: hansom    时间: 2011-10-13 16:51

用for的话,文件不分行好像也不好处理。
for /f "tokens=2 delims==" %%i in (1.txt) do (echo %%i >>temp1.txt)
作者: sxw    时间: 2011-10-13 17:32

1.txt贴出来?
作者: hfg1977    时间: 2011-10-13 19:07

  1. 分行:
  2. sed "s/.*username=\([0-9]\+\).*/\1/" 01.txt
  3. 分行或不分行:
  4. type 01.txt|sed "y/;&/\n\n/"|sed -n "/username=/ s/.*username=\([0-9]\+\).*/\1/p"
复制代码

作者: awk    时间: 2011-10-13 20:55

  1. gawk -F"[=&;]" "{for(i=1;i<=NF;i++)if($i==\"username\"){j=i+1;print $j}}" a.txt
复制代码

作者: hansom    时间: 2011-10-13 21:58

回复 5# awk
谢谢awk!,你的gawk把我要全部取出了
G:\vbs>gawk -F"[=&;]" "{for(i=1;i<=NF;i++)if($i==\"username\"){j=i+1;print $j}}"
temp.txt
1005203
2442689
2794991
2940253
4121341
15250977
16381849
18502445
23028594
23520785

G:\vbs>pause
请按任意键继续. . .
作者: hansom    时间: 2011-10-13 22:01

回复 4# hfg1977


    多谢指点·
你的不分行的代码我运行后却只取出了一个我要的。

G:\vbs>type temp.txt  | sed "y/;&/\n\n/"  | sed -n "/username=/ s/.*username=\([
0-9]\+\).*/\1/p"
23520785

G:\vbs>pause
请按任意键继续. . .
作者: awk    时间: 2011-10-13 23:17

回复 4# hfg1977
  1. sed "y/;&/\n\n/" a.txt | sed -n "/username=/ s/username=//p"
复制代码

作者: awk    时间: 2011-10-13 23:17

回复 7# hansom


可能是你的sed版块问题,我这里测试一切正常。
作者: hansom    时间: 2011-11-3 17:41

地址变动一下就出不出了:&amp;username=38784392">
作者: hansom    时间: 2011-11-3 17:45

回复 9# awk


    我的sed 是4.0.7的
作者: awk    时间: 2011-11-3 21:43

回复 11# hansom


试试4.2.1
作者: awk    时间: 2011-11-3 21:50

回复 10# hansom


需求变了,代码当然要跟着变。
作者: hansom    时间: 2011-11-3 23:12

呵呵,gawk -help,看得好累啊。。有点没辙了。。。
作者: hansom    时间: 2011-11-3 23:20

回复 13# awk
请教前辈代码应如何改下?
作者: hansom    时间: 2011-11-3 23:23

1648507"></a><br/>2
2673694"></a><br/>3
为什么把后面的取出来了,而前面是正确的呢?
哪位朋友能提供下gawk的chm的帮助文档?
作者: awk    时间: 2011-11-4 08:09

回复 16# hansom


Batcher置顶的帖子里面有pdf文档
作者: awk    时间: 2011-11-4 08:16

回复 15# hansom
  1. gawk -F"[\x22=&;]" "{for(i=1;i<=NF;i++)if($i==\"username\"){j=i+1;print $j}}" a.txt
复制代码

作者: happy886rr    时间: 2016-4-2 19:24

  1. sed "s/username=/\r\n&/g" 1.txt|sed "s/username=\([0-9]*\).*/\1/g"|more +1
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2