我说A1~A7是指随意的7个字符串,用第二种方式就不行了吧
追答第二种方式还是可以的,变通一下即可。
for i in "A1" "A2" "A3" "A4" "A5" "A6" "A7"
do
cat text.txt|grep -q "$i"
if [ $? -ne 0 ]; then
flag=1
break #只要有一个没包含就立即退出for循环,省得做许多无用功
fi
done
多谢大神,还有点迷糊,两个问题:第一,如果用awk,只能和print使用,我怎么把yes或者no这些log输出到某个文件呢,我试了下直接>不行。第二,上面的程序还有点不懂[ $? -ne 0 ] && flag=1, 如果上一句grep有一次没有出来东西,flag被置成1,这里就可以跳出循环了吧;我感觉现在这样写的只取决于最后一个str7是否能grep出来?望赐教! 刷新一下第二个问题有了答案,嘿嘿。
追答第一,> 要在整个awk语句后面用,这种形式: awk '....' text.txt >result.txt
第二,是的,我上面补充回答的已经加了break跳出for循环。但不加也没错,只是效率低点。刷新一下,发现你已经看到了。
“只取决于最后一个str7是否能grep出来”,这个说法不对。因为只有grep不出来,才会改变flag的值(置1),如果flag在grep前面几个字符串的时候就已经被置1了,那么str7的结果对其无影响。
谢谢大神,读了一下这个确实OK,不过我后面还要用到去这个txt里查找A1—A7七个字符串,这样写就有点麻烦了,请问还有其他的解法没?多谢啦
shell 查看一个文件text.txt里是否包含多个字符串比如A1和A2,如果是...
一个awk语句解决:awk 'BEGIN{RS=""}{if($0~"A1" && $0~"A2" && $0~"A3" && $0~"A4" && $0~"A5" && $0~"A6" && $0~"A7")print "yes";else print "no"}' text.txt 思路就是:1)awk是按记录(默认为一行文件内容)处理文本的,现在将awk的记录分隔符RS清空(默认是换行符)...
注册表那些键值都是什么意思?怎么管理?
Windows注册表是帮助Windows控制硬件、软件、用户环境和Windows界面的一套数据文件,注册表包含在Windows目录下两个文件system.dat和user.dat里,还有它们的备份system.da0和user.da0。通过Windows目录下的regedit.exe程序可以存取注册表数据库。在以前,在windows的更早版本(在win95以前),这些功能是靠win.ini,system.ini...