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

时间:2013-09-25 13:13:24

标签: 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脚本的输出:

$ 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 

除了解决方案,任何人都可以告诉我为什么会这样做?

非常感谢!

4 个答案:

答案 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"