免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4400 | 回复: 13
打印 上一主题 下一主题

grep 结果过长的问题 急!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-07-11 16:13 |只看该作者 |正序浏览
for recode in `grep searchkey infile`;do
  echo $recode
done

当检索结果过长的情况
比如,结果为abcd...................12345.....
会被切成2,3行 结果输出后
adcd............
12345......
.....

怎么才能不被切呢??

论坛徽章:
0
14 [报告]
发表于 2011-07-11 20:46 |只看该作者
本帖最后由 linux_kim 于 2011-07-11 22:15 编辑

if [ $TOTAL -gt 1 ]; then
  echo "> Press any key to Continue:\c";read INPUT < /dev/tty
  if [ "$INPUT" = "q" ]; then
    break
  fi
fi
问题已解决,while read 循环里标准输入 < /dev/tty
谢谢大家了

论坛徽章:
0
13 [报告]
发表于 2011-07-11 18:57 |只看该作者
本帖最后由 linux_kim 于 2011-07-11 19:31 编辑
  1. grep ^$INPUT $PWD/$FNAME | while read line; do
  2.         clear
  3.         echo $recode
  4.         echo '*****************************************************************************************************************'
  5.         awk -F, '/^'$FNAME'/ {printf " <%s[%s]>:%s\n",$2,$4,substr("'"$recode"'",$3+1,$4)} END{print"\n"}' $INI
  6.         echo "                                                    - $NOWPG / $TOTAL -                                          "
  7.         echo '*****************************************************************************************************************'
  8.         NOWPG=`expr $NOWPG + 1`
  9.       done
复制代码
这样做我也试过,的确一下子都打出来了。
不过加上echo "> Press any key to Continue:\c";read INPUT
的时候停不下来了。。晕 第2个read无效了
  1. grep ^$INPUT $PWD/$FNAME | while read line; do
  2.         clear
  3.         echo $recode
  4.         echo '*****************************************************************************************************************'
  5.         awk -F, '/^'$FNAME'/ {printf " <%s[%s]>:%s\n",$2,$4,substr("'"$recode"'",$3+1,$4)} END{print"\n"}' $INI
  6.         echo "                                                    - $NOWPG / $TOTAL -                                          "
  7.         echo '*****************************************************************************************************************'
  8.         if [ $TOTAL -gt 1 ]; then
  9.           echo "> Press any key to Continue:\c";read INPUT
  10.           if [ "$INPUT" = "q" ]; then
  11.             break
  12.           fi
  13.         fi
  14.         NOWPG=`expr $NOWPG + 1`
  15.       done
复制代码

论坛徽章:
0
12 [报告]
发表于 2011-07-11 18:33 |只看该作者
回复 8# linux_kim


    那你最好按照3楼的做法吧, 使用read line

论坛徽章:
0
11 [报告]
发表于 2011-07-11 18:13 |只看该作者
本帖最后由 linux_kim 于 2011-07-11 18:28 编辑
  1. #!/bin/sh

  2. INI="mst.ini"
  3. PWD="$SO_DATA/comn/mfdk"

  4. while [ 0 ]; do
  5.   clear
  6.   echo '*****************************************************************************************************************'
  7.   awk -F, 'BEGIN{i=0} /^#/ {i++; printf" [%02d]: %-24s (%s)%-10s",i,substr($1,2),$2,""; if(NR%2==0) print"\r"} END{print"\n"}' $INI
  8.   echo '                             Usage: quit and return to menu, please Type [q]                                     '
  9.   echo '*****************************************************************************************************************'
  10.   echo "> Please Enter MenuNumber:\c";read INPUT
  11.   if [ "$INPUT" = "q" ]; then
  12.     break
  13.   elif [ -z "$INPUT" ]; then
  14.     continue
  15.   else
  16.     FNAME=`awk -F, 'BEGIN{i=0} /^#/ {i++; ARY[i]=$2} END{print ARY['$INPUT']}' $INI`
  17.     if [ -z "$FNAME" ]; then
  18.       continue
  19.     fi
  20.   fi
  21.   while [ 0 ]; do
  22.     echo "> Please Enter $FNAME Key:\c";read INPUT
  23.     if [ "$INPUT" = "q" ]; then
  24.       break
  25.     elif [ -z "$INPUT" ]; then
  26.       continue
  27.     else
  28.       ## LINE=`grep ^$INPUT $PWD/$FNAME`
  29.       if [ -z "$LINE" ]; then
  30.         echo "> Key not found ($INPUT) !"
  31.         sleep 2
  32.         break
  33.       fi
  34.       TOTAL=`grep -c ^$INPUT $PWD/$FNAME`
  35.       NOWPG=1
  36.       for recode in "`grep ^$INPUT $PWD/$FNAME`"; do
  37.         clear
  38.         echo $recode
  39.         echo '*****************************************************************************************************************'
  40.         awk -F, '/^'$FNAME'/ {printf " <%s[%s]>:%s\n",$2,$4,substr("'"$recode"'",$3+1,$4)} END{print"\n"}' $INI
  41.         echo "                                                    - $NOWPG / $TOTAL -                                          "
  42.         echo '*****************************************************************************************************************'
  43.         if [ $TOTAL -gt 1 ]; then
  44.           echo "> Press any key to Continue:\c";read INPUT
  45.           if [ "$INPUT" = "q" ]; then
  46.             break
  47.           fi
  48.         fi
  49.         NOWPG=`expr $NOWPG + 1`
  50.       done
  51.     fi
  52.   done
  53. done

  54. exit 0
复制代码
代码38行,导致无法循环处理

论坛徽章:
0
10 [报告]
发表于 2011-07-11 18:10 |只看该作者
怎看啊?

论坛徽章:
0
9 [报告]
发表于 2011-07-11 18:03 |只看该作者
感觉应该跟你的终端的大小有关的 看看能不能限制下大小!
你可以最大化终端看看

论坛徽章:
0
8 [报告]
发表于 2011-07-11 18:01 |只看该作者
那我的循环不就没意义了吗?
我是要把检索出来的行循环,然后对每行进行处理。。。

论坛徽章:
0
7 [报告]
发表于 2011-07-11 17:39 |只看该作者
回复 6# linux_kim

再加一个引号
for recode in "`grep searchkey infile`"; do
  echo "$recode"
done

论坛徽章:
0
6 [报告]
发表于 2011-07-11 17:29 |只看该作者
你忘了加引号了,不是检索结果过长导致的, Try
for recode in "`grep searchkey infile`"; do
  echo $rec ...
ryh19860922 发表于 2011-07-11 16:19



检索结果为单行的时候是没问题
结果为复数行的时候也变成一行了。。。怎么解决阿?
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP