Вычитание старого текстового файла из нового

Вам следует обратить внимание на «ограниченный» режим bash (, начинающийся с bash --restrictedили bash -r), который предотвращает такие команды, как cd, и блокирует запуск любого исполняемого файла по полному пути, поэтому он позволяет выполнять только то, что в $PATH.

Кроме того, он предотвращает изменение переменных среды, таких как PATH.

Вы можете найти обзор «ограниченного» режима bash здесь .

1
24.10.2019, 23:22
2 ответа

Вы можете использовать tail -n+<NUM_LINE> fileдля печати file, начиная со строки NUM_LINE.

Чтобы удалить количество строк mailfile1из mailfile2, сохраните результат вmailfile2.new:

tail -n+$(( $(wc -l <mailfile1) + 1)) mailfile2 > mailfile2.new
  • wc -l <mailfile1печатает количество строкmailfile1
  • $(( $(wc -l <mailfile1) + 1))печатает количество строк mailfile1+ 1
0
27.01.2020, 23:40

Предполагая, что ваши файлы отформатированы одинаково (в Linux это должно включать заглавные буквы ), например один адрес электронной почты в строке, commбудет делать то, что вы хотите:

$ cat old <(echo '--') new
foo@example.com
farkle@example.com
flotz@example.com
bar@example.com
--
farkle@example.com
bar@example.com
flotz@example.com
frammitz@example.com
glop@example.com
yurbine@example.com
$ comm -i13 <(sort old) <(sort new)
frammitz@example.com
glop@example.com
yurbine@example.com

Опция -13для commуказывает не отображать адреса, которые есть только в old(-1), и не отображать адреса, которые есть в обоих файлах(-3). Таким образом, на выходе отображаются только те адреса, которые найдены только в new.

Если вы работаете в BSD, вы можете добавить переключатель comm's -iдля выполнения совпадения -без учета регистра, если ваши файлы еще не нормализованы относительно регистра букв.

1
27.01.2020, 23:40

Теги

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