2012-03-28 7 views
0

の内容は、だから、他の同様の質問がありますが、ここで私が何をしたいのか具体的にはだ -- 検索一つのファイルに別の

私は1つの本当に長いファイルを持っています。

line1 
line2 
line3 
line4 
line1 
line1 
line2 
line8 
line1 
line2 

のように見えるlong.txtは今、私は別のファイルを持って、

line1 
line2 

のように見えるpattern.txtは最後に、

newline1 
newline2 

のように見えるreplace.txtがあります上記で実行した後にsedを呼び出す方法

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

なぜ中央の1つの 'line1'が変わらないのですか? – kev

+0

私のパターンは、具体的には、第1行目では 'line1'、第2行目では' line2'でなければなりません。私は具体的には、元のファイルに "line1"を含めて検索するパターンと一致しない*ことを示すようにしました。 –

答えて

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スクリプトを使用してsed置換LHS(パターン)を構築し、RHSは(置き換え) - cat.sed
  • long.txtファイルを処理する別のsedスクリプトに上記の置換文字を差し込みます。
0
$ paste -d'/' pattern.txt replace.txt | sed '[email protected]*@s/&/@' >script.sed 
$ sed -f script.sed long.txt 
関連する問題