Заменить только восемь шестнадцатеричных цифр, игнорировать, если меньше или больше 8 цифр вместе. Использование команды sed

Файлы и подкаталоги каталога также должны принадлежать группе.

Владелец каталога (или корень) должен:

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 для каталогов.

2
22.06.2018, 14:04
3 ответа

В 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.

4
27.01.2020, 21:50

Вы можете использовать границу слова \bдля обозначения начала или конца слова, и дополнительно нужно учитывать, что 0xвозможен перед числом:

sed -E 's/\b(0x|)[0-9a-fA-F]{8}\b/\100000000/g'

Тем не менее,есть частные случаи, которые нужно продумать, что с ними делать, например 00x12345678, в приведенном выше шаблоне он не заменяется.

5
27.01.2020, 21:50
$ 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, если он есть ), сохраняется и вставляется перед нулями при замене.

1
27.01.2020, 21:50

Теги

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