Linux grep输出只打印bash脚本中的一行

Linux grep输出只打印bash脚本中的一行,linux,bash,shell,grep,Linux,Bash,Shell,Grep,如何从grep获得结果,以便在bash脚本中打印到他们自己的行上 当在终端中使用grep时,输出将以我希望的方式显示 例如: $ whois x.x.85.72 | grep 'OrgName\|NetRange\|inetnum\|IPv4' NetRange: x.x.85.64 - x.x.85.95 NetRange: x.x.0.0 - x.x.255.255 OrgName: xxxxx Technologies Inc. 在bash中使用相同

如何从grep获得结果,以便在bash脚本中打印到他们自己的行上

当在终端中使用grep时,输出将以我希望的方式显示

例如:

$ whois x.x.85.72 | grep 'OrgName\|NetRange\|inetnum\|IPv4'
NetRange:       x.x.85.64 - x.x.85.95
NetRange:       x.x.0.0 - x.x.255.255
OrgName:        xxxxx Technologies Inc.
在bash中使用相同的grep命令时,它只打印一行

我的bash脚本的输出:

$ lookup xx.com
xx.com resolves to: x.x.85.72
NetRange: x.x.85.64 - x.x.85.95 NetRange: x.x.0.0 - x.x.255.255 OrgName:xxxxx Technologies Inc.
#! /bin/bash
VAR1="$1"

IP=`net lookup $VAR1`
echo $VAR1 resolves to: $IP
RANGE=`whois $IP | grep 'OrgName\|NetRange\|inetnum\|IPv4'`
echo $RANGE 
我的bash脚本:

$ lookup xx.com
xx.com resolves to: x.x.85.72
NetRange: x.x.85.64 - x.x.85.95 NetRange: x.x.0.0 - x.x.255.255 OrgName:xxxxx Technologies Inc.
#! /bin/bash
VAR1="$1"

IP=`net lookup $VAR1`
echo $VAR1 resolves to: $IP
RANGE=`whois $IP | grep 'OrgName\|NetRange\|inetnum\|IPv4'`
echo $RANGE 
除了一个解决方案,谁能告诉我为什么它会这样做


非常感谢

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

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"
让我们用引号和不带引号打印其结果:

$ 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" 

阅读报价部分下的
manbash
。另外,使用
$()
比使用反勾号更清晰,并且允许嵌套

缺少
$RANGE
变量的引号

你应使用:

echo "$RANGE"
如果没有
引号
,则不会保留换行符。

替换:

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

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