Вам следует обратить внимание на «ограниченный» режим bash (, начинающийся с bash --restricted
или bash -r
), который предотвращает такие команды, как cd
, и блокирует запуск любого исполняемого файла по полному пути, поэтому он позволяет выполнять только то, что в $PATH
.
Кроме того, он предотвращает изменение переменных среды, таких как PATH
.
Вы можете найти обзор «ограниченного» режима bash здесь .
Вы можете использовать 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 Предполагая, что ваши файлы отформатированы одинаково (в 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
для выполнения совпадения -без учета регистра, если ваши файлы еще не нормализованы относительно регистра букв.