2012-03-28 66 views
0

的內容,這樣也有其他類似的問題,但這裏特別是我想做的事 -sed的 - 在一個文件中搜索的另一個

我有一個很長的文件。 long.txt看起來像

line1 
line2 
line3 
line4 
line1 
line1 
line2 
line8 
line1 
line2 
現在

,我還有一個文件,pattern.txt看起來像

line1 
line2 

最後,replace.txt看起來像

newline1 
newline2 

有一種叫sed的方式,使得在上面運行它之後,我以

newline1 
newline2 
line3 
line4 
line1 
newline1 
newline2 
line8 
newline1 
newline2 
+0

爲什麼一個'line1'在中間不變? – kev 2012-03-28 06:28:51

+0

我的模式應該特別在第一行是'line1',在第二行是'line2'。我特別在原始文件中包含了一行「line1」,以表明它應該*不匹配正在搜索的模式。 – 2012-03-28 07:21:01

回答

2

這可能會爲你工作(GNU SED):

cat <<\! >cat.sed 
> :a;$!{N;ba};s/\n/\\n/ 
> ! 
sed ':a;$!'"{N;ba};s/$(sed -f cat.sed pattern.txt)/$(sed -f cat.sed replace.txt)/g" long.txt 
newline1 
newline2 
line3 
line4 
line1 
newline1 
newline2 
line8 
newline1 
newline2 

說明:

  • 使用通用sed腳本構建LHS(模式)和RHS(替換)一個sed替代 - cat.sed
  • 將上述替換插入到處理long.txt文件的另一個sed腳本中。
0
$ paste -d'/' pattern.txt replace.txt | sed '[email protected]*@s/&/@' >script.sed 
$ sed -f script.sed long.txt 
相關問題