Как найти все остальные символы, кроме + и пробела

$ grep -Eo '(EventCorrelationId|CreationTime|SubscriberNumber)=[^ ]+' file
EventCorrelationId="615-493|-1899671563||1550927718000"
CreationTime="20190225094504"
SubscriberNumber=92705073362
  • grep -Eogrep в расширенном режиме регулярных выражений (меньше экранирования специальных символов )и печать только совпадающих частей
  • (EventCorrelationId|CreationTime|SubscriberNumber)соответствует EventCorrelationId или CreationTime или SubscriberNumber
  • =[^ ]+за которым следует "=", за которым следует не -символ пробела -один или несколько раз

Редактировать1:

Теперь разделены символом "|":

$ echo $(grep -Eo '(EventCorrelationId|CreationTime|SubscriberNumber)=[^ ]+' file) | tr ' ' '|'
EventCorrelationId="615-493|-1899671563||1550927718000"|CreationTime="20190225094504"|SubscriberNumber=92705073362

Редактировать 2:

Теперь разделены символом "|" в обратном порядке, используяtac:

$ echo $(grep -Eo '(EventCorrelationId|CreationTime|SubscriberNumber)=[^ ]+' file | tac) | tr ' ' '|'
SubscriberNumber=92705073362|CreationTime="20190225094504"|EventCorrelationId="615-493|-1899671563||1550927718000"
1
08.04.2021, 10:48
1 ответ

Процитируйте свой шаблон! Это прекрасно работает:

$ grep '[^+]' file
+  ++ ++

Ваш [^+]интерпретируется как шаблон диапазона glob, если (без кавычек любой файл, не соответствующий+)и обработанный вашей оболочкой, grepувидит, что имена файлов соответствуют шаблону.

In most shell implementations, one may also use ^ as the range negation character, e.g. [^[:space:]]. (via)

Если вы также хотите исключить пробелы, используйте [^+ ]в качестве шаблона:

$ grep '[^+ ]' file2
+1     +
abcd fgh

Вы можете проверить, как ваша оболочка интерпретирует ваши команды с помощьюset -x:

set -x
grep [^+] file
2
28.04.2021, 22:53

Теги

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