Как с помощью grep найти значение после знака =

Вы используете неправильное действие в ограничении упорядочивания. «Promote» следует использовать только для ресурсов Master / Slave, используйте «start» для ваших групп.

pcs constraint order start SQL-Group then ASTERISK-Group
2
14.03.2017, 14:04
5 ответов

Попробуйте grep все, что не =:

# echo '9701=1?? 
9701=10.Pp 
9701=1a 8a 
9701=3.a_tt 
9701=1/a -00
9701=Bg1998pps' | egrep -o '9701=[^=]{1,50}'
9701=1?? 
9701=10.Pp 
9701=1a 8a 
9701=3.a_tt 
9701=1/a -00
9701=Bg1998pps
# echo '9701=Bg19=98pps' | egrep -o '9701=[^=]{1,50}'
9701=Bg19
## If you too need to include equal char
# echo '9701=Bg19= 98pps' | egrep -o '9701=.{1,50}'
9701=Bg19= 98pps
0
27.01.2020, 22:03
cut -d '=' -f 2-  data.in

Это будет рассматривать каждую строку как ряд =-разграниченных полей и возвращать все после первого поля

Выход:

1??
10.Pp
1a 8a
3.a_tt
1/a -00
Bg1998pps

Если вам нужно быть уверенным, что возвращается только то, что относится к начальной части строки (9701 в вашем случае):

grep '^9701=' data.in | cut -d '=' -f 2-

Альтернативно, все это с помощью awk (хотя это будет неудачно, если в строке более одного =):

awk -F '=' '/^9701/ { print $2 }' data.in
1
27.01.2020, 22:03

С pcregrep:

pcregrep -o1 '9701=(.*)'

Выводит то, что находится справа от самого левого вхождения 9701= в строке (для тех строк, которые содержат 9701=).

С GNU grep, собранным с достаточно свежим PCRE:

grep -Po '9701=\K.*'

Хотя это не сообщит о пустой строке для ввода типа 9701= (то есть там, где то, что находится после 9701=, является пустой строкой).

Стандартно, это было бы работой для sed:

sed -n 's/9701=/\
/;s/.*\n//p'
1
27.01.2020, 22:03

grep в режиме Perl-regex с lookbehind:

grep -oP '=\K.+'
0
27.01.2020, 22:03

Чтобы включить все остальные символы в ваш grep , вы можете использовать следующее:

egrep -Eo '9701=.{1,50}' test.log

Точка представляет ЛЮБОЙ символ.

Но это не приведет к отсечению части «9701 =» в каждой строке. Чтобы добиться этого, вы можете использовать cut

cut -d "=" -f 2- test.log

, хотя это могло бы вызвать спотыкание, если бы значение также включало = .

sed исправит это за вас и в конечном итоге является лучшим решением вашей проблемы:

sed -r 's/^9701=(.*)$/\1/' test.log

или

sed 's/^9701=\(.*\)$/\1/' test.log

или даже

sed 's/^9701=//' test.log
1
27.01.2020, 22:03

Теги

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