$ grep -Eo '(EventCorrelationId|CreationTime|SubscriberNumber)=[^ ]+' file
EventCorrelationId="615-493|-1899671563||1550927718000"
CreationTime="20190225094504"
SubscriberNumber=92705073362
grep -Eo
grep в расширенном режиме регулярных выражений (меньше экранирования специальных символов )и печать только совпадающих частей (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"
Процитируйте свой шаблон! Это прекрасно работает:
$ 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