Формат файла tar является просто серией файлов, связанных вместе с несколькими заголовками. Это не очень сложное задание, чтобы разорвать его, вставить Ваше содержание и отложить его вместе. Однако Jander описал, как tar как программа не имеет служебных функций, чтобы сделать это и существуют дополнительные сложности со сжатием, которое имеет и к прежде и после внесения изменения.
Существуют, однако, инструменты для задания! Существует по крайней мере две системы там, которые позволят Вам сделать, обратная петля монтируется сжатого архива tar на папку, затем вносит Ваши изменения в файловой системе. Когда Вы сделаны, размонтировали папку, и Ваш сжатый архив готов прокрутиться.
Одна первая опция была бы archivemount проектом для FUSE. Вот учебное руководство на этом. Ваша система, вероятно, уже имеет FUSE и если это не делает Вашего распределения, должен иметь опцию для него.
Другая опция является tarfs. Более просто использовать, но я услышал, что это испытывает некоторые затруднения повредить архивы bzip2, таким образом, Вы могли бы протестировать это довольно полностью сначала.
Как насчет того, чтобы использовать разность, даже при том, что Вы не хотите разность? Попробуйте это:
diff --unchanged-group-format='@@ %dn,%df
%<' --old-group-format='' --new-group-format='' \
--changed-group-format='' a.txt b.txt
Вот то, что я получаю с Вашими демонстрационными данными:
$ cat a.txt
Foo Bar
X
Hello
World
42
$ cat b.txt
Foo Baz
Hello
World
23
$ diff --unchanged-group-format='@@ %dn,%df
%<' --old-group-format='' --new-group-format='' \
--changed-group-format='' a.txt b.txt
@@ 2,3
Hello
World
grep -Fxf file1 file2
-F
средства соответствуют простым строкам (не regexps), -x
средства только соответствия целой строки, -f
средства берут 'шаблоны' (т.е. строки) из файла, названного как его аргумент
-f
и -F
обмененный?. По крайней мере, в моем grep
версия похожа на это. Я должен обеспечить file2
вход к -f
аргумент, как cat file1 | grep -Fxf file2
, и затем работы. датчики
– Birei
15.12.2012, 22:01
comm
может использоваться. man comm
для всех опций, но Вы захотите использовать comm -12 ...
показать только строки, которые существуют в обоих исходных данных.
Как люди указали, необходимо передать вход через sort
сначала.
Я не думаю, что существует единственная команда, которая делает то, что Вы хотите, чтобы она сделала. Можно попытаться объединить вывод diff
с grep
,все же. Если Ваши текстовые файлы не содержат ни один из символов |
,<
,>
, следующее дает Вам несколько полезный вывод:
$ diff --side-by-side a b | grep -n -v "[|<>]"
3:Hello Hello
4:World World
diff --width=155 --left-column --side-by-side a b | grep -n -v '|' | sed 's/ *($//'
– Paused until further notice.
24.08.2010, 05:48
Dick Grune записал семейство инструментов для такого рода вещи:
http://dickgrune.com/Programs/similarity_tester/
Существуют версии, которые анализируют синтаксис различных языков, так, чтобы вещи как переименованные переменные могли рассматриваться как неизменные.
Это упаковывается как similarity-tester
в Debian и Ubuntu.
...%df'$'\n''%<'...
– Paused until further notice. 24.08.2010, 05:54... --unchanged-group-format="@@ %dn,%df%c'\012'%<" ...
(Отметьте двойные кавычки.) – Paused until further notice. 24.08.2010, 06:12which diff
видеть, является ли это Вашей проблемой. – justinjhendrick 28.02.2017, 05:08