grep输出在bash脚本中只打印单行

我怎样才能从grep打印自己的行在bash脚本中的结果?

当在terminal中使用grep时,输出显示如何,我希望它会出现。

例如:

$ whois xx85.72 | grep 'OrgName\|NetRange\|inetnum\|IPv4' NetRange: xx85.64 - xx85.95 NetRange: xx0.0 - xx255.255 OrgName: xxxxx Technologies Inc. 

在bash中使用相同的grep命令时,它将在一行上打印出来。

我的bash脚本的输出:

 $ lookup xx.com xx.com resolves to: xx85.72 NetRange: xx85.64 - xx85.95 NetRange: xx0.0 - xx255.255 OrgName:xxxxx Technologies Inc. 

我的bash脚本:

 #! /bin/bash VAR1="$1" IP=`net lookup $VAR1` echo $VAR1 resolves to: $IP RANGE=`whois $IP | grep 'OrgName\|NetRange\|inetnum\|IPv4'` echo $RANGE 

除了解决scheme,谁能告诉我为什么这样做?

谢谢一堆!

您需要引用该变量以保留该格式:

 echo "$RANGE" 

代替

 echo $RANGE 

全部一起:

 #!/bin/bash <--- be careful, you have an space after ! in your code VAR1="$1" IP=$(net lookup $VAR1) #<--- note I use $() rather than `` echo $VAR1 resolves to: $IP RANGE=$(whois $IP | grep 'OrgName\|NetRange\|inetnum\|IPv4') echo "$RANGE" 

鉴于这种:

 $ date; date Wed Sep 25 15:18:39 CEST 2013 Wed Sep 25 15:18:39 CEST 2013 

让我们用无引号打印结果:

 $ myvar=$(date; date) $ echo $myvar Wed Sep 25 15:18:45 CEST 2013 Wed Sep 25 15:18:45 CEST 2013 $ echo "$myvar" Wed Sep 25 15:18:45 CEST 2013 Wed Sep 25 15:18:45 CEST 2013 

引用在shell中非常重要,你需要引用所有的变量来保存换行符:

 #!/bin/bash VAR1="$1" IP=$(net lookup "$VAR1") echo "$VAR1 resolves to: $IP" RANGE=$(whois "$IP" | egrep 'OrgName|NetRange|inetnum|IPv4') echo "$RANGE" 

阅读引用部分下的man bash 。 也使用$()比使用反引号更清晰,它允许嵌套。

你错过了$RANGE变量的引用。

你应该使用:

 echo "$RANGE" 

没有quote ,换行符不被保留。

更换:

 RANGE=`whois $IP | grep 'OrgName\|NetRange\|inetnum\|IPv4'` echo $RANGE 

 whois $IP | grep 'OrgName\|NetRange\|inetnum\|IPv4' 

要么

 RANGE=`whois $IP | grep 'OrgName\|NetRange\|inetnum\|IPv4'` echo "$RANGE"