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

use*_*333 3 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.
Run Code Online (Sandbox Code Playgroud)

在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.
Run Code Online (Sandbox Code Playgroud)

我的bash脚本:

#! /bin/bash
VAR1="$1"

IP=`net lookup $VAR1`
echo $VAR1 resolves to: $IP
RANGE=`whois $IP | grep 'OrgName\|NetRange\|inetnum\|IPv4'`
echo $RANGE 
Run Code Online (Sandbox Code Playgroud)

除了解决方案,谁能告诉我为什么这样做?

谢谢你!

fed*_*qui 9

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

echo "$RANGE"
Run Code Online (Sandbox Code Playgroud)

代替

echo $RANGE
Run Code Online (Sandbox Code Playgroud)

全部一起:

#!/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"
Run Code Online (Sandbox Code Playgroud)

鉴于这种:

$ date; date
Wed Sep 25 15:18:39 CEST 2013
Wed Sep 25 15:18:39 CEST 2013
Run Code Online (Sandbox Code Playgroud)

让我们打印带有和不带引号的结果:

$ 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
Run Code Online (Sandbox Code Playgroud)