2016-06-01 61 views

回答

2

這取決於你的意思是「命令」。 UNIX命令可以是串聯在一起的任意長的流水線/簡單命令序列。

有多種方式,你可以做到這一點的話,比如有:

awk ' 
    BEGIN { s = "key1=value\n" } 
    /^key1=/ { printf s; s = ""; next } 
      { print } 
    END  { printf s } 
    ' infile >outfile && mv outfile infile 

下面的記錄表明這個動作:

pax> printf '\nkey1=value1\nkey2=value2\nkey3=value3\n' | awk ' 
...> BEGIN {s="key2=something_else\n"} 
...> /^key2=/ {printf s;s="";next} 
...>   {print} 
...> END  {printf s}' 

key1=value1 
key2=something_else 
key3=value3 

pax> printf '\nkey1=value1\nkey2=value2\nkey3=value3\n' | awk ' 
...> BEGIN {s="key4=something_new\n"} 
...> /^key4=/ {printf s;s="";next} 
...>   {print} 
...> END  {printf s}' 

key1=value1 
key2=value2 
key3=value3 
key4=something_new 

你也許可以這樣做,也是 a &&通過使用in-place sed編輯進行編輯,代價是(可能)更復雜的命令。

0

不在一個命令,但在一個線路,(儘管字包裹下文),第一更新 'KEY1':

echo "key1=value4" | join -t '=' -j 1 -a 1 -a 2 keys.txt - \ 
    | sed 's/=[^=]*=/=/' | sponge keys.txt 
cat keys.txt 

輸出:

key1=value4 
key2=value2 

添加 'KEY3' :

echo "key3=value3" | join -t '=' -j 1 -a 1 -a 2 keys.txt - \ 
    | sed 's/=[^=]*=/=/' | sponge keys.txt 
cat keys.txt 

輸出:

key1=value4 
key2=value2 
key3=value3 

注:我已經開始與keys.txt單倍行距,因爲這就是加入喜歡。 海綿來自Debian的moreutils包。的另一個優勢加入是,如果第一輸入我們鍵6,再後來KEY5加入輸出以數字順序的鍵。

相關問題