Вот одно обходное решение: diff
кажется, принимает <(expr) как arguemnts:
diff <(ssh \"cat path/file.name/") <(cat path/file.name)
Вот sed решение для сценария (легче на глазах, чем попытка получить его в одну строку на командной строке):
/<TEXT1>/ {
r File1
d
}
Выполнение его:
$ sed -f script.sed File2
/home/user1/
/home/user2/bin
/home/user1/a/b/c
<TEXT2>
Я отвечаю потому что 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
.
давно потребовалось много времени, чтобы найти это решение, используя замену VAR. Все решения SED не работали для меня, так как они либо удаляют полные строки, либо замените неправильно.
FILE2=$(<file2)
FILE1=$(<file1)
echo "${FILE2//TEXT1/$FILE1}"
заменяет все происшествия Text1 в File2 против содержимого файла1. Весь другой текст остается нетронутым.
sed '/<TEXT1>/{rFile1^Md^M}' File2
, где "^M" - Вы нажимающий возврат. Проблема состоит в том, что sed действительно нужны новые строки в {...} Разграничить r и команду d. – Kusalananda♦ 08.09.2011, 18:46sed $'/<TEXT1>/ {r File1\n d}'
– glenn jackman 08.09.2011, 20:18sed -e '/<TEXT1>/{r File1' -e 'd}' File2
– sdaau 07.06.2012, 17:12<TEXT1>
, Я просто хочу заменить саму строку, оставляя остальную часть строки неповрежденной?Text1: <TEXT1>
кому:Text1: <file_contents>
. – Robin Winslow 10.05.2014, 20:13