2013-05-15 340 views
0

我有兩個文件。我想將第一個文件(file1)的內容插入第二個文件(file2)之間的一些代碼(第二個文件是一個腳本)。例如,第二個文件應該是這樣的將文件的內容插入Linux上的另一個文件

upcode... 
#upcode ends here 
file1 content 
downcode ... 

UPCODE #upcode ends here和downcode應該永遠不會改變。

這是怎麼做到的?

+0

什麼是'upcode'和'downcode'。取決於它們是什麼,解決方案可能會改變。 – Bill

+0

我已經編輯了這個問題,你是對的。 – newzad

+1

順便說一句,如果你想在開始時插入'file1'(因爲'downcode'真的沒有任何意義)......做這樣的事情 - 'echo「#!/ bin/bash」> file2.tmp; cat file1 >> file2.tmp; cat file2 >> file2.tmp; mv file2.tmp file2' – Bill

回答

2

這裏是一個腳本來做到這一點(請注意,您的開始標記必須在文件中是唯一的) -

#!/bin/bash 

start="what you need" 

touch file2.tmp 

while read line 
do 
    if [ "$line" = "$start" ] 
    then 
    echo "$line" >> file2.tmp 
    cat file2 >> file2.tmp 
    fi 
    echo "$line" >> file2.tmp 
done < file1 
#mv file2.tmp file1 -- moves (i.e. renames) file2.tmp as file1. 
3

您可以嘗試sed

sed -e '/file1 content/{r file1' -e 'd}' file2 
  • /pattern/:圖案匹配線
  • r file1:讀取文件1
  • d:刪除行

注意:您可以添加-i選項以更改file2 inplace。

+0

這似乎是一個非常好的解決方案,但是我不理解它,我們搜索一個字符串,比如file2中的「#upcode ends here」,然後在它後面插入file1內容,正如我從你的解決方案中理解得越來越少,爲什麼我們需要讀取file1? – newzad

1
while IFS= read -r f2line; do 
    echo "$f2line" 
    [[ "$f2line" = "#upcode ends here" ]] && cat file1 
done <file2> merged_file 

或編輯文件2到位

ed file2 <<END 
/#upcode ends here/ r file1 
w 
q 
END 
相關問題