我有兩個文件。我想將第一個文件(file1
)的內容插入第二個文件(file2
)之間的一些代碼(第二個文件是一個腳本)。例如,第二個文件應該是這樣的將文件的內容插入Linux上的另一個文件
upcode...
#upcode ends here
file1 content
downcode ...
UPCODE #upcode ends here
和downcode應該永遠不會改變。
這是怎麼做到的?
我有兩個文件。我想將第一個文件(file1
)的內容插入第二個文件(file2
)之間的一些代碼(第二個文件是一個腳本)。例如,第二個文件應該是這樣的將文件的內容插入Linux上的另一個文件
upcode...
#upcode ends here
file1 content
downcode ...
UPCODE #upcode ends here
和downcode應該永遠不會改變。
這是怎麼做到的?
這裏是一個腳本來做到這一點(請注意,您的開始標記必須在文件中是唯一的) -
#!/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.
您可以嘗試sed
:
sed -e '/file1 content/{r file1' -e 'd}' file2
/pattern/
:圖案匹配線r file1
:讀取文件1d
:刪除行注意:您可以添加-i
選項以更改file2 inplace。
這似乎是一個非常好的解決方案,但是我不理解它,我們搜索一個字符串,比如file2中的「#upcode ends here」,然後在它後面插入file1內容,正如我從你的解決方案中理解得越來越少,爲什麼我們需要讀取file1? – newzad
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
什麼是'upcode'和'downcode'。取決於它們是什麼,解決方案可能會改變。 – Bill
我已經編輯了這個問題,你是對的。 – newzad
順便說一句,如果你想在開始時插入'file1'(因爲'downcode'真的沒有任何意義)......做這樣的事情 - 'echo「#!/ bin/bash」> file2.tmp; cat file1 >> file2.tmp; cat file2 >> file2.tmp; mv file2.tmp file2' – Bill