2つの異なるファイルがあります。
/home/user1/
/home/user2/bin
/home/user1/a/b/c
<TEXT1>
<TEXT2>
File2の<TEXT1>
をsed
を使用してFile1の内容に置き換えたい。私はこのコマンドを試しましたが、適切な出力が得られませんでした:
cat File2|sed "s/<TEXT1>/$(cat File1|sed 's/\//\\\//g'|sed 's/$/\\n/g'|tr -d "\n")/g"
他のツールを使用してこの問題を解決することもできます。
これがsedスクリプトソリューションです(コマンドラインで1行にまとめようとするよりも目には簡単です)。
/<TEXT1>/ {
r File1
d
}
それを実行する:
$ sed -f script.sed File2
/home/user1/
/home/user2/bin
/home/user1/a/b/c
<TEXT2>
Var置換を使用してこのソリューションを見つけるのに長い時間がかかりました。すべてのsedソリューションは、完全な行を削除するか、誤って置き換えるため、私にとっては機能しませんでした。
FILE2=$(<file2)
FILE1=$(<file1)
echo "${FILE2//TEXT1/$FILE1}"
File2内のすべてのTEXT1の出現箇所をfile1の内容と置き換えます。他のすべてのテキストは変更されません。
diff
/patch
メソッドがいくつかのケースで興味深いかもしれないので、私は答えます。 blob1
に含まれる行によるファイルblob2
に含まれる行の置換を定義するには、以下を使用します。
diff -u blob1 blob2 > patch-file
たとえば、blob1
に次のものが含まれている場合:
hello
you
およびblob2
には以下が含まれます:
be
welcome
here
生成されるpatch-file
は次のようになります:
--- blob1 2011-09-08 16:42:24.000000000 +0200
+++ blob2 2011-09-08 16:50:48.000000000 +0200
@@ -1,2 +1,3 @@
-hello
-you
+be
+welcome
+here
これで、このパッチを他のファイルに適用できます。
patch somefile patch-file
hello
、you
行をbe
、welcome
、here
行でsomefile
に置き換えます。