[英]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.