0

我从一个文件中读取了一些数据,只对需要的两列使用了 grep,并将输出重定向到一个变量中。

我的脚本如下所示:

#!/bin/bash
cat hosts.cfg | grep 'address\|host_name' | sed -e 's/\<address\>//g'  | while read line; do
        echo $line | sed 's/host_name//g' | sed -r 's/\s+//g' ;
done

输出现在看起来像这样:

Host1
xx.xx.xx.xx
Host2
xx.xx.xx.xx

问题是hosts和ips必须保存到数组中,而不是文件中!

输出必须如下所示:

Host1(tab)xx.xx.xx.xx

Host2(tab)xx.xx.xx.xx
4

4 回答 4

1

您正在寻找流程替代。$(command),或 s 中的旧式`

(对不起,它应该如何工作的描述不够清楚,我无法显示您的代码的修改版本)

于 2013-10-14T08:12:24.110 回答
0

您可以使用awk

echo $output | awk 'NR%2{printf $0"\t";next;}1'

要保存任何命令输出,请将其包装在反引号中,或者使用更新的(但不太向后兼容的)$(command) 样式替换。例如:

result=`echo $output | awk 'NR%2{printf $0"\t";next;}1'`
于 2013-10-14T08:16:57.133 回答
0

使用sed 'N;s/\n/\t/g'

改变

Host1
xx.xx.xx.xx
Host2
xx.xx.xx.xx

Host1(tab)xx.xx.xx.xx
Host2(tab)xx.xx.xx.xx
于 2013-10-14T08:46:20.153 回答
0

您可以使用“设置”来获得更快的输出

例如:

我有文件best2,

 # cat best2
 Host1 xx.xx.xx.xx Host2 xx.xx.xx.xx

制作一个名为:tabcheck.sh 的脚本

 # cat tabcheck.sh
 #!/bin/bash
 out=$(cat best2)
 set $out
 echo -e "$1\t$2\n$3\t$4"

 # ./tabcheck.sh
 Host1   xx.xx.xx.xx
 Host2   xx.xx.xx.xx

如果您使用 shift 命令(通常只能使用位置参数访问九个命令行参数。shift 命令通过移动每个参数来访问大于九个的命令行参数。)以及。

谢谢。

于 2013-10-15T07:27:36.247 回答