проблема с форматом даты sed

Да, для этой цели можно использовать diff. Это так же просто, как:

diff -rq dir1 dir2

Опция -rсообщает diffтакже рекурсивно обращаться к подкаталогам -. Параметр -qуказывает diffсообщать только о различиях в файлах.

Эти две опции я обычно использую, когда хочу узнать, какие файлы находятся в dir1, а какие нет в dir2, и наоборот. (Вы также можете отбросить параметр -r, если вы не хотите рекурсивно обращаться к подкаталогам -, а рассматриваете только непосредственное содержимое двух каталогов.)

Обратите внимание, что это покажет вам как файлы, которые существуют в dir1, но не в dir2, так и файлы, которые существуют в dir2, но не в dir1, например.:

$ diff -rq /tmp/dir1/ /tmp/dir2/
Only in /tmp/dir1/: file1
Only in /tmp/dir2/: file2
Only in /tmp/dir2/: file3

Если вам нужно только одно из направлений (, например, файлы, которые находятся в dir1, но не в dir2), и получить список имен файлов только (без помех "Только в..." ), вы, конечно, можете попытаться массировать вывод diffс помощью grep, sed, awkи т.п., но в этом случае лучше вообще не использовать diff. и вместо этого используйте решение Stéphane Chazelas.

2
11.01.2021, 18:51
1 ответ

Вопрос двоякий:

  1. в контексте, ориентированном на строку -, .соответствует любому символу -, включая,

  2. вы использовали флаг g, который говорит sed сделать как можно больше замен в строке

, поэтому он соответствует всем не -перекрывающимся последовательностям из шести символов, которые ограничены запятыми.

Для вашего примера данных должно быть достаточно сбросить флаг g, чтобы была заменена только первая совпадающая последовательность -, однако вы также должны подумать о замене .чем-то более конкретным, например[^,](any символ кроме запятой )или[0-9](любая из латинских десятичных цифр ).

3
18.03.2021, 22:37

Теги

Похожие вопросы