我有一個檔案,它是通過執行“env > env.sh”創建的
$ cat env.sh
X=1
Y=2
Z=3
ABCD=/var/tmp
SSH_CONNECTION=192.168.31.1 21905 192.168.31.3 22
我想將其轉換為每一行的匯出命令,即
$ cat env_out.sh
export X="1"
export Y="2"
export Z="3"
export ABCD="/var/tmp"
export SSH_CONNECTION="192.168.31.1 21905 192.168.31.3 22"
如何僅使用 linux shell 命令執行此操作?我有一個 bash 腳本(見下文)來執行此操作 - 但我希望能夠使用命令列命令來執行此操作。
while IFS= read -r i;
do
KEY=`echo $i | cut -f1 -d'='`
VALUE=`echo $i | cut -f2 -d'='`
echo "export $KEY=\"$VALUE\""
done < env.sh
uj5u.com熱心網友回復:
如果您知道其中的每一行env.sh都是有效的變數賦值的事實,那么一個簡單的sed就足夠了:
$ sed 's/^/export /' env.sh
export X=1
export Y=2
export Z=3
export ABCD=/var/tmp
export SSH_CONNECTION=192.168.31.1 21905 192.168.31.3 22
另一方面,如果env.sh包含注釋行、空行、多行值等,那么它會變得更復雜一些。
考慮以下輸入檔案:
$ cat env.sh
#A=345
X=1
Y=2
Z=3
ABCD=/var/tmp
SSH_CONNECTION=192.168.31.1 21905 192.168.31.3 22
LAST_VAR='a
multi
line
value'
簡單的sed不再適合我們:
$ sed 's/^/export /' env.sh
export #A=345 # ??
export X=1
export Y=2
export # ??
export Z=3
export ABCD=/var/tmp
export SSH_CONNECTION=192.168.31.1 21905 192.168.31.3 22
export LAST_VAR='a # ??
export multi # ??
export line # ??
export value' # ??
另一種sed基于查找格式行做得更好的嘗試<variable_name>=:
$ sed -E 's/([^=#] =)/export \1/' env.sh
#export A=345
export X=1
export Y=2
export Z=3
export ABCD=/var/tmp
export SSH_CONNECTION=192.168.31.1 21905 192.168.31.3 22
export LAST_VAR='a
multi
line
value'
'當然,如果 中有更多'復雜' 條目,這仍然不足env.sh,例如:
$ cat env.sh
X=3
declare -n Y=X
MULTILINE='a
multi
x=345
line
value'
$ sed -E 's/([^=#] =)/export \1/' env.sh
export X=3
export declare -n Y=X # ??
export MULTILINE='a
multi
export x=345 # ??
line
value'
在這一點上,您需要查看更強大的決議想法......
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/378761.html
標籤:猛击
上一篇:呼叫函式時Bash合并特定檔案
下一篇:在bash中重新分配$1的值
