LinuxSir.cn,穿越时空的Linuxsir!

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

请教一个问题,如何将文件中某字符段等于一个字符串的行提取出来?

[复制链接]
发表于 2006-5-17 16:09:46 | 显示全部楼层 |阅读模式
比如我有一个文件file.txt ,我想要将第35-40个字符等于123456 的行提取并打印出来,这个shell命令该怎么写呢?

用cut 和grep 的话就只能显示那几个字符,不能把整行都显示.有没有什么好办法啊
发表于 2006-5-17 16:20:02 | 显示全部楼层
用正则表达式 一个点表示一个任意字符,所以34个点再加上123456。。。。
似乎比较笨。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-17 17:08:26 | 显示全部楼层
34个点.....我本来要从第285位开始取的........
我估计眼睛就此费了
回复 支持 反对

使用道具 举报

发表于 2006-5-17 17:09:53 | 显示全部楼层
Post by goodma
比如我有一个文件file.txt ,我想要将第35-40个字符等于123456 的行提取并打印出来,这个shell命令该怎么写呢?

用cut 和grep 的话就只能显示那几个字符,不能把整行都显示.有没有什么好办法啊


try this:

  1. $ egrep '.{34}123456.*' file.txt

  2. or

  3. $ grep '.\{34\}123456.*' file.txt

  4. or

  5. $ awk 'BEGIN { FS="" } $35$36$37$38$39$40=="123456" { print }' file.txt
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-17 17:57:07 | 显示全部楼层
楼上的命令果然有用,看来以后得多看看正则表达式

多谢johnny_jiang兄.
回复 支持 反对

使用道具 举报

发表于 2006-5-18 10:36:34 | 显示全部楼层
我是来补充我的回答的,呵呵,不过4楼已经回答了。。

.\{34\} 就可以表示34个点,呵呵
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-18 21:38:37 | 显示全部楼层
也谢谢你拉,呵呵
有没有别的办法实现呢?
回复 支持 反对

使用道具 举报

发表于 2006-5-18 22:03:36 | 显示全部楼层
while read line; do string=`expr substr $line 35 6`; if [[ $string = 123456 ]]; then echo $line; fi; done <file.txt

呵呵。
回复 支持 反对

使用道具 举报

发表于 2006-5-18 22:09:52 | 显示全部楼层
我忽略了,一行未必是一个字符串:beat
回复 支持 反对

使用道具 举报

发表于 2006-5-18 22:11:29 | 显示全部楼层
grep 的话就只能显示那几个字符,不能把整行都显示.有没有什么好办法啊

这个说法好像不对,grep是显示整行的,只不过grep 123456不精确。
grep '.\{34\}123456.*' file.txt

这是有误的,任何一个字符起34个字符后紧跟123456再跟任何字符。

xxxxxxxxxxxxxxcxxxxxxxxxxxxxxxxxxxxxxxxxxxxx123456xxxx

匹配

所以应该是grep '^.\{34\}123456.*' file.txt
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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