Извлечь ключевое слово из строки

Можно использовать:

sed -e "s/^\(limit\.\)[^']*/\1/" < data

Это соответствует ограничению. в начале строки, за которым следует как можно больше символов , которые не являются ', и заменяет его только частью в начале ( \1). Вы можете редактировать шаблон и замену в соответствии с тем, как на самом деле выглядят Ваши данные - важной частью является [^']*.

.

1
23.05.2017, 15:39
2 ответа

Проверьте наличие «verify = sender» в Exim acl, например, для команды RCPT TO: (поиск acl_smtp_rcpt=xxxxx). Этот параметр Exim в acl проверяет, является ли отправитель «действительным» (см. exim docs для того, что именно это означает), и вам может понадобиться удалить его, так как это внутренний сервер, отправляющий только от поддельных отправителей. На производственном сервере есть лучшие способы сделать то же самое.

Если ACL проверяют отправителя при обработке RCPT TO:, как это делают некоторые конфигурации, тогда вы можете получить это сообщение, где это выглядит как проблема в получателе, когда он фактически отправитель проверить, вызвав отклонение.

Попробуйте запустить exim командной строки в режиме проверки адреса, чтобы увидеть, какие ACL выполняются:

exim4 -d -bvs noreply@example.com
exim4 -d -bv someone@somewhere.com
-121--196450-

вы можете попробовать этот проект android-notifier

-121--38435-

Вы можете использовать что-то подобное:

$ grep -oE '(LSUFE|PCRF)-[^._]*' input.txt  | uniq
PCRF-17717B1
LSUFE-583B1

uniq требуется, поскольку каждая строка содержит оба

Кроме того, если порядок вывода не имеет значения, можно использовать sort -u , а не uniq - это также устранит любые дубликаты, возникающие на нескольких строках ввода.

Вот еще одна альтернатива в perl:

perl -F, -a -e 'next unless $F[1] =~ s/.*((LSUFE|PCRF)-[^._]*).*/$1/  ; print $F[1],"\n"' input.txt

Это выполняет поиск regexp и заменяет только на поле 2 ( $ F [1] в perl, поскольку массивы perl основаны на нуле), а затем печатает 2 поля.

Эта версия perl добавляет соответствующий текст в качестве дополнительного поля к концу входной строки:

perl -F, -a -e 'chomp ; next unless $F[1] =~ s/.*((LSUFE|PCRF)-[^._]*).*/$1/ ; print $_,",",$F[1],"\n"' input.txt 

Используется chomp () для удаления завершающего \n из входной строки, затем печатается входная строка ( $ _ ), запятая, измененное поле 2 и новая строка.

2
27.01.2020, 23:36

Только захваченная информация

sed  's/.*\(LSUFE-\([^_.]*\)[_.].*/\1/' YourFile

добавлена ​​в конец с , в качестве разделителя

sed  's/.*\(LSUFE-\([^_.]*\)[_.].*/&,\1/' YourFile

С несколькими шаблонами одновременно

sed  -e 's/.*\(LSUFE-\([^_.]*\)[_.].*/\1/' -e 's/.*\(PCRF-\([^_.]*\)[_.].*/\1/' YourFile

с GNU sed

sed 's/.*\(\(LSUFE\|PCRD\)-\([^_.]*\)[_.].*/\1/'
0
27.01.2020, 23:36

Теги

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