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

sh/bash/dash/ksh/zsh等Shell脚本
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#16

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

遇到一个小小的困难....
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#17

帖子 eexpress » 2008-03-14 19:45

无聊了。没通用性的问题,也讨论。自己搞吧,一堆管道。我给个例子。

代码: 全选

☎  cat auto-pic.bash 
#!/bin/bash

[ -z "$1" ] && echo "需要指定搜索的日期。" && exit;
cd /home/media/restricted-picture/

for i in 1 2 3 4 5
do
wget -nc --no-cookies http://www.xx.net/bbs/forumdisplays_22_1000_desc_lastpost_30_$i.html -O $i.htm
cat $i.htm|tr '>' '\n'|tr '"' '\n'|grep "^[0-9][0-9]-\|^show.*html"|sed "s/\ [0-9][0-9]:.*$//"|tr '\n' ','|sed s/,[^,]*[0-9],s/\\ns/g|grep $1>$i-$1.lst
done

cat *-$1.lst|sed s/l,[0-9][^l]*$/l/g|sed s/^s[^,]*,//|tr , '\n'|sed s/^/http:\\/\\/www.imagegarden.net\\/bbs\\//>$1.list
rm *.htm *.lst *.html
wget -nc -i $1.list
rm *.list

for i in *.html
● 鸣学
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#18

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

代码: 全选

tr '\n' '\0' |perl -pe "s@<(T\d+)>.*</\1>@@g"|tr '\0' '\n'
sed 不能跨行~...
^_^ ~~~
要理解递归,首先要理解递归。

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

#19

帖子 iblicf » 2008-03-14 20:07

谁说不能 N n
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#20

帖子 BigSnake.NET » 2008-03-14 20:12

iblicf 写了:谁说不能 N n
举一个..
^_^ ~~~
要理解递归,首先要理解递归。

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

#21

帖子 iblicf » 2008-03-14 20:50

我不知道你要干么,怎么举?

比如吧,, sed 'n;n;n;G' file 隔三行+空行
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#22

帖子 BigSnake.NET » 2008-03-15 11:53

代码: 全选

title: test
foo<T1>bar
123
bar</T1>
Tag for T1 is 123
barfoo<T2>bar
321
foobar</T2>bar
去掉<T\d></T\d>标签内的内容, 跨行
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#23

帖子 eexpress » 2008-03-15 12:02

跨行不好的。改那FS什么的环境变量。主要是脚本结束的时候,不知道如何写恢复的。
所以,还是tr替换掉/n好些。搞完,再替换回来。
● 鸣学
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#24

帖子 BigSnake.NET » 2008-03-15 12:04

eexpress 写了:跨行不好的。改那FS什么的环境变量。主要是脚本结束的时候,不知道如何写恢复的。
所以,还是tr替换掉/n好些。搞完,再替换回来。
问题就在这里
替换什么?

我试过 \0 , 可是sed不行..
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#25

帖子 eexpress » 2008-03-15 12:23

头天不是说过了。找一个特殊的字符而已。我的情况,就用,逗号。只要和原始关键字符不冲突的,无关紧要的,就可以。就是17楼的tr ,的写法。你甚至可以替换成●啊。只要原文不用的。

改成\\n都可以的哦。


那环境变量的,以前搞好久,不舒服的,没找到缺省的写法,导致不能恢复,如果不恢复,有些龌龊的。你也可以研究下。
● 鸣学
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#26

帖子 BigSnake.NET » 2008-03-15 12:25

eexpress 写了:头天不是说过了。找一个特殊的字符而已。我的情况,就用,逗号。只要和原始关键字符不冲突的,无关紧要的,就可以。就是17楼的tr ,的写法。你甚至可以替换成●啊。只要原文不用的。

改成\\n都可以的哦。


那环境变量的,以前搞好久,不舒服的,没找到缺省的写法,导致不能恢复,如果不恢复,有些龌龊的。你也可以研究下。
那你怎么知道哪个字符原文没有用过?
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#27

帖子 eexpress » 2008-03-15 12:39

我的●,\\n这些,基本不会出现。随便搞一个utf8里面的中文符号也可以。那不,你试试☎
● 鸣学
caike
帖子: 30
注册时间: 2005-12-09 16:22

#28

帖子 caike » 2008-03-16 19:24

I just posted the solution I used, thank you so much.
especially, BigSnake.NET and iblicf :D
java程序员 linux菜鸟 C++初学者
http://ke-cai.net
回复