当在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"