如何从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.
我的bash脚本:
#! /bin/bash
VAR1="$1"
IP=`net lookup $VAR1`
echo $VAR1 resolves to: $IP
RANGE=`whois $IP | grep 'OrgName\|NetRange\|inetnum\|IPv4'`
echo $RANGE
除了解决方案,任何人都可以告诉我为什么会这样做?
非常感谢!
答案 0 :(得分:9)
您需要引用变量以保留格式:
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
答案 1 :(得分:2)
引用在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
。同样使用$()
比使用反引号更清晰,它允许嵌套。
答案 2 :(得分:1)
您错过了$RANGE
变量的引用。
您应该使用:
echo "$RANGE"
如果没有quote
,则不会保留换行符。
答案 3 :(得分:1)
替换:
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"