Linux grep输出只打印bash脚本中的一行
如何从grep获得结果,以便在bash脚本中打印到他们自己的行上 当在终端中使用grep时,输出将以我希望的方式显示 例如: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中使用相同
$ 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"