Удалить слова между специальными символами

Создайте любого пользователя, которого хотите:

# vim ro_user_desc.ldif

dn: cn=ro_admin,dc=example,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
userPassword: {SSHA}o3pSzVM3HXqUY6R2VHGJkJEWlwLOUH1N

userPasswordхеш вы можете получить от slappasswd -s your_plaintext_pass. Создать этого пользователя:

# ldapadd -x -W -D "cn=admin,dc=example,dc=com" -f ro_user_desc.ldif

Назначьте ему нужную роль:

# vim ro_access.ldif

dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {3}to dn.base="dc=example,dc=com" by dn.exact="cn=ro_admin,dc=example,dc=com" read

Мы включили список (только для чтения )доступ к полному дереву dc=example,dc=comдля пользователя, созданного выше. Правильный адрес dn: olcDatabase={1}mdb,cn=configлучше найти с помощью ответа @sOliver . Но имейте в виду, что этот пример для базы MDB OpenLdap в случаях HDB и т. д. может отличаться.

Наконец, примените его:

# ldapmodify -Y EXTERNAL -H ldapi:/// -f ro_access.ldif

0
18.11.2019, 12:58
3 ответа

В вашем особом случае вы можете:

  • заменить все нежелательные символы одним известным символом (, который является частью этого набора)
  • удалить все строки между двумя экземплярами этого символа замены
echo 'a "removeme" b +removeme+ c *removeme#d+removeme~.123' | sed -e '/\W/p; s/["+*#~]/#/g ; s/#[^#]\+#//g'
a "removeme" b +removeme+ c *removeme#d+removeme~.123
a  b  c d.123

Обратите внимание, что, поскольку вы хотите сохранить ., вы не можете использовать класс «не -слово», так как они включают «.». Если вы хотите любой ценой избежать предоставления явного списка символов, вы можете:

  • замените точку символом слова, который вы вряд ли встретите (шип, косая черта O, ударение a/e/i/o/u или греческий/кириллица)
  • примените выражение выше, используя [ :punct :]
  • восстановить точку.
1
28.01.2020, 02:38

Изменить все точки на новые строки, что гарантирует отсутствие знаков препинания.Тогда это просто вопрос нежадного сопоставления между двумя знаками препинания:

$  echo 'a "removeme" b +removeme+ c *removeme#d+removeme~.123' |
   sed -e 'p
     y/./\n/
     s/[[:punct:]][^[:punct:]]*[[:punct:]]//g
     y/\n/./
   '

a "removeme" b +removeme+ c *removeme#d+removeme~.123
a  b  c d.123

Примечание :это все внутри Posix sed.

0
28.01.2020, 02:38

Perl хорошо справляется с такими случаями. Мы используем отрицательный просмотр вперед, чтобы создать категорию знаков пунктуации, исключая точку :

.
echo '......' |
perl -lpe '
 print;
 $p = qr/(?!\.)[[:punct:]]/;
 s/$p.*?$p//g;
' 
0
28.01.2020, 02:38

Теги

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