簡體   English   中英

Bash腳本:編輯變量的輸出

[英]Bash Scripting : edit output of a variable

我從文件中讀取了一些數據,僅將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

問題是主機和ips必須保存到數組而不是文件中!

輸出必須如下所示:

Host1(tab)xx.xx.xx.xx

Host2(tab)xx.xx.xx.xx

您正在尋找流程替代。 $(command)` s中的舊樣式。

(對不起,關於它應該如何工作的描述還不夠清楚,我無法顯示您修改后的代碼)

您可以使用awk

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

要保存任何命令輸出,請將其包裝在反引號或較新的(但向后兼容性較差)的$(command)樣式替換中。 例如:

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

使用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

您可以使用“設置”來獲得更快的輸出

例如:

我有文件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命令(通常,使用位置參數只能訪問9個命令行參數。shift命令通過移動每個參數可以訪問大於9的命令行參數。)

謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM