如何判断文本文件里是否含有特定字符串

sh/bash/dash/ksh/zsh等Shell脚本
caike
帖子: 30
注册时间: 2005-12-09 16:22
送出感谢: 0
接收感谢: 0

如何判断文本文件里是否含有特定字符串

#1

帖子 caike » 2008-03-14 18:54

又要求助各位了, 有一个文本文件a.txt, 有一些XML标签和其它文本的混合:

代码: 全选

title: test
<T1>
123
</T1>
Tag for T1 is 123
<T2>
321
</T2>
我要对这个文本进行处理, 不断的删除XML标签和它中间的内容, 一直到全部删除完为止. XML标签有一定的规律, <T数字>, 用正则表达式查找就行了.

请问要用什么命令来实现这个判断,grep, sed? 用最简单的方法来实现就可以了,不用获取标签之间的内容,只要判断有没有标签就行了.
谢谢.

Thanks for your help, actually the problem is not so difficult as you guys thought. My poor expression misleaded. Below is the solution I used(There is no Chinese input available in Lab, so I just post in English.):
----------------------------------solution begin----------------------------------------------------------------

代码: 全选

       #calcuate how many tags in the file
	tagsNumber=$(egrep -c '/*<T' source.txt)
	
       #do if there is tag in the file
	while [ $tagsNumer -gt 0 ]; do
	...... ....
       # I will remove one tag(in pair) each time, so re-calculate it
	tagsNumber=$(egrep -c '/*<T' source.txt)
	
	done #end of while loop
上次由 caike 在 2008-03-16 19:21,总共编辑 2 次。
java程序员 linux菜鸟 C++初学者
http://ke-cai.net
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

#2

帖子 BigSnake.NET » 2008-03-14 18:55

不断的删除XML标签和它中间的容易
?
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
iblicf
帖子: 3766
注册时间: 2007-01-15 17:15
送出感谢: 0
接收感谢: 0

#3

帖子 iblicf » 2008-03-14 18:58

应该用个样本举例,原来啥样,想弄啥样
caike
帖子: 30
注册时间: 2005-12-09 16:22
送出感谢: 0
接收感谢: 0

#4

帖子 caike » 2008-03-14 19:01

BigSnake.NET 写了:
不断的删除XML标签和它中间的容易
?
Sorry,打错字了 :oops:

内容
java程序员 linux菜鸟 C++初学者
http://ke-cai.net
caike
帖子: 30
注册时间: 2005-12-09 16:22
送出感谢: 0
接收感谢: 0

#5

帖子 caike » 2008-03-14 19:03

iblicf 写了:应该用个样本举例,原来啥样,想弄啥样
完了, 英语没学好, 中文也说不好了.

其实我要实现的功能很简单, 就是判断a.txt里是否存在 "<T*>"这种字符串.
java程序员 linux菜鸟 C++初学者
http://ke-cai.net
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

#6

帖子 BigSnake.NET » 2008-03-14 19:06

linux 下哪个正则工具有平衡组功能?..
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
iblicf
帖子: 3766
注册时间: 2007-01-15 17:15
送出感谢: 0
接收感谢: 0

#7

帖子 iblicf » 2008-03-14 19:09

什么叫平衡组功能? 判断闭合标签吧? 唉
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

#8

帖子 BigSnake.NET » 2008-03-14 19:10

iblicf 写了:什么叫平衡组功能? 判断闭合标签吧? 唉
就是递归匹配
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
caike
帖子: 30
注册时间: 2005-12-09 16:22
送出感谢: 0
接收感谢: 0

#9

帖子 caike » 2008-03-14 19:13

BigSnake.NET 写了:linux 下哪个正则工具有平衡组功能?..
不用平衡, 只要判断开始标签就行了, 我删的时候是用sed来删的, 删除从<T*>开始,到</T*>结束中间的所有行, 所以只要存在<T*>, 就会存在结束标签</T*>.

我把问题说的太复杂了, 简化一下,
如何判断一个文件里是否存在"foo"这三个字符?
java程序员 linux菜鸟 C++初学者
http://ke-cai.net
头像
iblicf
帖子: 3766
注册时间: 2007-01-15 17:15
送出感谢: 0
接收感谢: 0

#10

帖子 iblicf » 2008-03-14 19:18

sed -n '/\<T1\>/,/\<\/T1\>/d' file
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

#11

帖子 BigSnake.NET » 2008-03-14 19:22

嵌套呢?
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
iblicf
帖子: 3766
注册时间: 2007-01-15 17:15
送出感谢: 0
接收感谢: 0

#12

帖子 iblicf » 2008-03-14 19:24

傻阿,,T1 T2 :)
caike
帖子: 30
注册时间: 2005-12-09 16:22
送出感谢: 0
接收感谢: 0

#13

帖子 caike » 2008-03-14 19:28

iblicf 写了:sed -n '/\<T1\>/,/\<\/T1\>/d' file
请问这个if 要怎么写呢?
java程序员 linux菜鸟 C++初学者
http://ke-cai.net
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

#14

帖子 BigSnake.NET » 2008-03-14 19:30

问一下楼主会不会出现<T1><T2>foo</T2></T1> 这样的...
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
caike
帖子: 30
注册时间: 2005-12-09 16:22
送出感谢: 0
接收感谢: 0

#15

帖子 caike » 2008-03-14 19:35

BigSnake.NET 写了:问一下楼主会不会出现<T1><T2>foo</T2></T1> 这样的...
不会的, 不会出现嵌套的情况.
java程序员 linux菜鸟 C++初学者
http://ke-cai.net
回复

回到 “Shell脚本”