一部のファイルを使用しdiff
てパッチを当てています。patch
私が知っている限り、元のファイルを配布することは許可されていません。
今の違いは次のとおりです。
1c1
< Hello, this is the original.
---
> Hey, this is the new version.
私はしたくない(そして様々な理由でできない)元の行が含まれています。元の行を含めずに違いを作成することは可能ですか?変えるオリジナルライン?
私が見つけた最も近いのはdiff -e
ビルドスクリプトを使用することですが、Debianにデフォルトでインストールされているようed
ではありません。 andを使ってこれを行うことed
はできますか?diff
patch
編集する:たとえば、次のようなファイルを取得したいとします。
Hello, this is a file.
It is pretty cool.
I wrote it in a text editor.
次のファイルに:
Hello, this is a file.
It is kinda awesome.
I wrote it in a text editor.
一般的な diff には、次の元の行が含まれます。
2c2
< It is pretty cool.
---
> It is kinda awesome.
私欲しくないオリジナルライン(「素敵ですね」)でもはいdiffファイルにあります。私は基本的に2行を次に置き換えると言うdiffファイルが欲しいです。パッチするのに必要なすべての情報がありますが、元のコンテンツはまったく含まれていないIt is some Awesomeです。本質的に私は「交換」というdiffが欲しい。どの2列に位置これ:"。
patch -e
スクリプトを実行するとed
必要なものはすべて生成されますが、edはデフォルトでDebianに含まれていないため、使用したくありません。
2c
It is kinda awesome.
.
答え1
diff
Qの意見で私が理解した内容を捉えるために「いいえ、欲しいことはできません」と答えます。patch
なぜなら、配布できないコンテンツを含むコンテキストを含める必要があるからです。
頼れないからed
存在する場合は存在するsed
ことを信じることができる場合は、変更されたファイルを繰り返し、式を使用して各ファイルを更新できますsed
。
$ cp input tempfile && \
$ sed \
-e '2s/.*/It is kinda awesome./' \
-e '4s/.*/No really, this is line 4/' \
tempfile > input && \
$ rm tempfile
上記のコマンドの生成をスクリプト化し、「input」を変更する必要があるファイル名に変更し、「-e...」行を変更する必要がある項目に置き換える可能性を提案するために、コマンドを細分化しました。ここでは、2行と4行の内容を対応するテキストに変更します。
"tempfile"が既存の名前と競合することが心配な場合は、このSpartanシステムにmktemp
。各入力ファイルに対して(再)使用する一時ファイルを生成して、いくつかのmktempサイクルを保存できます。
この ed-less システムに-i
このフラグをサポートする sed がある場合、バッチを次のように単純化できます。
$ sed -i.orig \
-e '2s/.*/It is kinda awesome./' \
-e '4s/.*/No really, this is line 4/' \
input
mikeservはsedの 'c'コマンドについて良いことを指摘しました。 GNU sedは、「c」コマンドと同じ行に代替テキストを許可するようですが、そうでない場合に備えて、次のオプションがあります。
$ cat > patch.sed
2c\
this is the new line two
4c\
this is an awesomer line four
^D
$ sed -f patch.sed input > output ## or sed -i.orig -f patch.sed input
答え2
diff file1 file2 | grep ^">"
私はそれについて考えた
答え3
少なくともGNUでは、diff
適切な(行形式)指定子を使用することが可能に見えます。LFMT
diff --new-line-format="replace line %-dn with:%c'\012'%L" --unchanged-line-format= --old-line-format= file1 file2
試験用:
$ cat file1
Hello, this is a file.
It is pretty cool.
I wrote it in a text editor.
$ cat file2
Hello, this is a file.
It is kinda awesome.
I wrote it in a text editor.
$ diff --new-line-format="replace line %-dn with:%c'\012'%L" --unchanged-line-format= --old-line-format= file1 file2
replace line 2 with:
It is kinda awesome.