2013-11-04 15 views
0

後的文本到結束的新行追加我有這樣的與內容的文件:如何cat'ing多行文件轉換成可變

aaa bbb 
ccc ddd 
eee fff 

如果我的貓的文件到一個變量:

var=`cat file.txt` 

我可以重複的內容是這樣的:

echo $var 
aaa bbb ccc ddd eee fff 

或者這樣,用新行保留:

echo "$var" 
aaa bbb 
ccc ddd 
eee fff 

我想文本的新行添加到變量$ VAR,所以,當我寫的是$ var回了一個文件:

echo "$var" > newfile.txt 

newfile.txt的內容將有我在最後的新行:

var2=`cat newfile.txt` 
echo "$var2" 
aaa bbb 
ccc ddd 
eee fff 
ggg hhh 
iii jjj 

我想不出如何做到這一點。 謝謝。

+0

,如果你有什麼只要做'var = $ var $(cat newfile)'? – fedorqui

回答

1
$ var2=$(< file.txt) 
$ var2+=$'ggg hhh\niii jjj\n' 
$ echo "$var2" > newfile.txt 
$ cat new file.txt 
aaa bbb 
ccc ddd 
eee fff 
ggg hhh 
iii jjj 

+=運算符可用於將值附加到現有參數的末尾。你也可以放棄修改的var2值,只需簡單地用額外的數據是這樣的:

$ var2=$(< file.txt) 
$ { echo "$var2" 
> printf "%s\n" "ggg hhh" "iii jjj" 
> } > newfile.txt 

一些更新,以避免bash擴展。

  1. $(< file.txt)是標準$(cat file.txt)的更有效實施。
  2. $'...'dash支持,但嵌入式換行符應該仍然工作:

    var2="$string1 
    $string2" 
    
  3. printf "%s\n" "$string1" "$string2"dash正常工作。
+0

我不得不做一個小小的改變。我想添加的內容並不是像'iii jjj'這樣真正固定的字符串,而是變量。所以我必須這樣做: var2 + = $'\ n'「$ {string1} $ {string2}」 變量需要在「」中,而\ n需要在「」中。 – locke

+0

我發現這可以在/ bin/bash中使用,但不能在/ bin/sh中使用(我認爲這是破解我的操作系統) – locke

-1

你只是附和它附加模式

echo "$var" >> newfile.txt 

的>>意味着它不會打開普通寫入模式的文件。它在O_RDRW |中打開O_APPEND

+0

我想避免多個文件寫入。 – locke

2

而不是使分配,然後將數據附加到變量,只是做你想要什麼,當你進行初始分配:

var=$(cat file.txt; echo ggg hhh; echo iii jjj;) 

var=$(cat file.txt - << EOF 
ggg hhh 
iii jjj 
EOF 
) 
+0

在我的情況下,不可能在初始任務中完成所有工作。我需要讀取一個大文件,經歷很多邏輯,我定期追加到變量,最後(如果發生變化)寫出新文件。 – locke

1
$ var="$var 
> xxx yyy 
> zzz ggg" 

$ echo $var 
aaa bbb 
ccc ddd 
eee fff 
xxx yyy 
zzz ggg 
+0

我在發佈我的問題後發現此作品,但將其寫入shell腳本有點不方便。我認爲它對空白很敏感,即我不能有第2和第3行縮進。 – locke