2013-10-18 45 views
0

匹配的字符串後複製FILE_B最近,我需要做這項工作:猛砸,如果發現FILE_A匹配的字符串,然後在FILE_A

步驟1

查找在FILE_A一個匹配的字符串,例如,要匹配的字符串是「ILikeeStackoverflow」。

file_A

......

ILikeStackoverflow

The line after "ILikeStackoverflow"

.......

步驟2

如果該字符串 「ILikeeStackoverflow」 是存在的,然後複製另一個FILE_B(小於10行)到這個FILE_A,只是串之後。

所以做這個副本之後,FILE_A應該是這樣的形狀:

file_A

......

ILikeStackoverflow

Line_1_of_file_B

Line_2_of_file_B

......

Line_n_of_file_B

The line after "ILikeStackoverflow"

.......

我的代碼是這樣的,但不能正常工作(無論FILE_A和FILE_B在當前目錄)。

 match_string="ILikeStackoverflow" 
     sed " /^$match_string/a"$file_B" " file_A 

非常感謝您的建議!

編輯:

現在,我知道爲什麼我被卡住,但無法弄清楚如何修復代碼。請繼續評論,如果你有一個想法,非常感謝!

問題是,只有當字符串佔用一個單獨的行,sat的代碼工作。如果匹配的字符串只是長字符串的一部分,那麼他的代碼就無法工作。例如,如果fileA是這樣的,那麼代碼無法工作。

file_A

......

/test/begin/ILikeStackoverflow/test/end

The line after "ILikeStackoverflow"

.......

其實,在我的 「的index.html」,要匹配的字符串是: 「5000S-IntW300」,而包含我的匹配字符串行是:

/blue-ccd-data/DAMIC_SNOLAB_RUN1/5000s-IntW300-OS

任何建議,以解決它呢?

再次感謝!

編輯2:

其實,我想比匹配串線後的1個多行的地方複製FILEB。舉例來說,真正的位置是:

file_A

......

/test/begin/ILikeStackoverflow/test/end

The line has an important information and fileB shouldn't be copied here.

This is the exact line of fileB should be copied.

.......

+0

你是如何運行的** sat's **命令?請注意,他的'^'在行的開始處做了一個零寬度斷言,這不是行中間的'5000s-IntW300'的情況。 – Birei

+0

@Birei,你明白了!我也是 !所以,當我刪除這個'^'時,它就起作用了!但是,還有一個小問題但重要的問題:我將再次編輯我的文章! – user2740039

+0

所以,你想在比賽結束後插入其他文件的兩行內容,而不是下一個。總是這樣或者依賴於其他任何東西? – Birei

回答

1

您可以使用此sed

sed -i.bak '/matchString/r fileB' fileA 

測試:

文件

sample 
text 
Stackoverflow 
some 
text 

文件B

Line 1 
Line 2 
.... 
Line 10 

輸出:

sat:~# sed -i.bak '/^Stackoverflow/r FileB' FileA 
sample 
text 
Stackoverflow 
Line 1 
Line 2 
.... 
Line 10 
some 
text 
+0

感謝您的回覆,但它對我來說不起作用 - 至少在我的代碼腳本中:'sed -i.bak「/^$ table_key_words_monitoring_mainpage/r $ modified_one_entry_table」index.html',其中'$ table_key_words_monitoring_mainpage'是關鍵詞,'$ modified_one_entry_table'是file_A,'index.html'是file_B。有什麼建議麼 ? – user2740039

+0

@ user2740039,看起來像是在混合A和B:'sed -i.bak「/^$ table_key_words_monitoring_mainpage/r索引。html「$ modified_one_entry_table' –

+0

@glennjackman,在我的情況下,我想在'$ table_key_words_monitoring_mainpage」的關鍵字行之後將'modified_one_entry_table'的文件複製到我的'index.html'中。無論如何,我改變了我的代碼,但它也沒有幫助,另外,它產生了像'modified_one_entry_table.bak'這樣的無用文件。 – user2740039

0

的關鍵是閱讀比賽結束後一條線,並且它與N命令來完成。然後使用r來插入其他文件的全部內容。本來我想:

sed '/Stackoverflow/ { N; r fileB };' fileA 

,但給了我以下錯誤:

sed: -e expression #1, char 0: unmatched `{' 

所以我使用的文件與sed命令,並使用-f開關調用它。

內容script.sed

/Stackoverflow/ { 
     N 
     r fileB 
} 

並運行它想:

sed -f script.sed fileA 

立足的sat示例數據,它產生:

sample 
text 
Stackoverflow 
some 
Line 1 
Line 2 
.... 
Line 10 
text