Файлы и подкаталоги каталога также должны принадлежать группе.
Владелец каталога (или корень) должен:
chgrp -R groupname /path/to/directory
chmod -R ug+rwX /path/to/directory
find /path/to/directory -type d -exec chmod g+s {} +
Задать для каталогов setgid (например, с помощью команды find
выше) гарантировать, что все новые файлы, созданные в каталоге, будут в группе. umask
по-прежнему контролирует разрешения по умолчанию для созданных файлов, поэтому umask
всех пользователей, которые создают файлы в этом каталоге, должны быть не менее 002
, чтобы получить разрешения 664
для файлов и 775
для каталогов.
В Perl вы можете использовать «просмотреть -вокруг утверждений», т. е. вы можете сказать «не предшествует шестнадцатеричная цифра» и «не следует шестнадцатеричная цифра»:
perl -pe 's/(?<![0-9a-fA-F])[0-9a-fA-F]{8}(?![0-9a-fA-F])/00000000/g'
Обходы вида -не учитываются в совпадающей строке, т.е. они не заменяются и могут совпадать более одного раза (один раз в образе -позади и один раз в образе -впереди ).
Вы также можете использовать класс [:xdigit:]
POSIX вместо 0-9a-fA-F
.
Вы можете использовать границу слова \b
для обозначения начала или конца слова, и дополнительно нужно учитывать, что 0x
возможен перед числом:
sed -E 's/\b(0x|)[0-9a-fA-F]{8}\b/\100000000/g'
Тем не менее,есть частные случаи, которые нужно продумать, что с ними делать, например 00x12345678
, в приведенном выше шаблоне он не заменяется.
$ echo '0x12345678 0aef1234 0098adefa 123456789' | sed -E 's/(\<|x)[[:xdigit:]]{8}\>/\100000000/g'
0x00000000 00000000 0098adefa 123456789
$ echo '12345678 0aef1234 0098adefa 123456789' | sed -E 's/(\<|x)[[:xdigit:]]{8}\>/\100000000/g'
00000000 00000000 0098adefa 123456789
Регулярное выражение
(\<|x)[[:xdigit:]]{8}\>
будет соответствовать шестнадцатеричному числу, состоящему из восьми цифр. Это должно быть полное слово или предшествовать x
. Предыдущий символ (x
, если он есть ), сохраняется и вставляется перед нулями при замене.