2010-04-19 64 views
3

我有兩個文本文件,我想將文本放置在另一箇中間,我做了一些研究,發現有關添加單一字符串的信息:合併兩個文本文件在特定位置,awk或者sed

我在所謂的STUFFGOESHERE第二個文本文件的註釋,所以我嘗試:

sed '/^STUFFGOESHERE/a file1.txt' file2.txt 

的sed:1: 「/^STUFFGOESHERE/A long.txt」:指揮預計\後跟文本

所以我嘗試了一些不同的東西,試圖根據給定的行放置文本的內容,但沒有lu CK。

任何想法?

回答

5

這應做到:

sed '/STUFFGOESHERE/ r file1.txt' file2.txt 

如果你想刪除STUFFGOESHERE行:

sed -e '/STUFFGOESHERE/ r file1.txt' -e '/STUFFGOESHERE/d' file2.txt 

如果要修改文件2到位:

sed -i -e... 

(或也許sed -i '' -e...,我正在使用GNU sed 4.1.5。)

2

如果你可以使用前或編輯,嘗試

cat <<EOF | ex -e - file2.txt 
/^STUFFGOESHERE/ 
.r file1.txt 
w 
q 
EOF 

相同的腳本適用於ED:

cat <<EOF | ed file2.txt 
/^STUFFGOESHERE/ 
.r file1.txt 
w 
q 
EOF 
1
awk '/STUFFGOESHERE/{while((getline line<"file1")>0){ print line};next}1' file2 
1

Unix外殼(bash中,CSH,zsh的,等等):

: | perl -e '@c = join("", map {<>} 0..eof); print $c[0] =~ /STUFFGOESHERE/ ? $` . $c[1] . $'"'"' : $c[0]' file2.txt file1.txt > newfile2.txt 
+0

出於某種原因,我不明白爲什麼該文本文件是放在其他文件後,並沒有經過STUFFGOESHERE – S1syphus 2010-04-19 15:05:04

+0

你的句子格式不正確,但我會猜測你的意思。主要原因是我編寫的所有腳本都是從標準輸入或從命名爲參數的文件中輸入它們的輸入。我從不將它們硬編碼到腳本中。這是一個基本的腳本衛生問題。另一個原因是Perl沒有一個接受文件名並返回文件內容的函數,就像PHP那樣。 – reinierpost 2010-04-20 15:28:12