Получить часть строки в Bash - PullRequest
       22

Получить часть строки в Bash

0 голосов
/ 23 февраля 2011

У меня есть несколько файлов журналов, и я grep их для конкретной строки:

grep UncategorizedLdap *

и я получаю ~ 33 результатов:

2009-01-01:org.springframework.ldap.UncategorizedLdapException: Uncategorized exception occured during LDAP processing; nested exception is javax.naming.NamingException: [LDAP: error code 1 - Operations Error]; remaining name 'ou=ABC'
2009-01-02:org.springframework.ldap.UncategorizedLdapException: Uncategorized exception occured during LDAP processing; nested exception is javax.naming.NamingException: [LDAP: error code 1 - Operations Error]; remaining name 'ou='
2009-01-02:org.springframework.ldap.UncategorizedLdapException: Uncategorized exception occured during LDAP processing; nested exception is javax.naming.NamingException: [LDAP: error code 1 - Operations Error]; remaining name 'ou=ABD'
2009-01-03:org.springframework.ldap.UncategorizedLdapException: Uncategorized exception occured during LDAP processing; nested exception is javax.naming.NamingException: [LDAP: error code 1 - Operations Error]; remaining name 'ou=ABE'
...

Как я могу изменить вызов grep для возврататолько

ou=ABC
ou=
ou=ABD
ou=ABE
...

?

Ответы [ 3 ]

1 голос
/ 23 февраля 2011

Если у вас есть GNU grep (что должно быть в Cygwin):

grep -Po "UncategorizedLdap.*'\Kou.*?(?=')" *

выберет строки и выберет строку в одной команде. Он использует Perl-совместимые регулярные выражения, которые поддерживают обходные пути. Часть перед \K является закадровым и используется при сопоставлении, но не включается в выходные данные. Строка внутри (?=), которая в данном случае представляет собой одинарную кавычку, является предвидением и также не включена в вывод. Опция -o печатает только совпадающую часть строки (это не исключено из вывода).

1 голос
/ 23 февраля 2011

если вы используете bash, то иногда вы можете просто использовать bash

for file in *
  while read -r line
  do
     case "$line" in
       *UncategorizedLdap* )
          line=${line#*\'}
          line=${line%\'*}
          echo $line ;;
     esac
  done < $file
done
1 голос
/ 23 февраля 2011

Вы можете передать вывод в perl:

grep UncategorizedLdap * | perl -lpe '($_) = /(ou=\w*)/'

Если у вас не установлен Perl, вот решение для bash:

grep UncategorizedLdap * |
while read line; do
    line=${line#*\'}
    line=${line%\'*}
    echo $line
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...