grep точная строковая переменная

grep точная строковая переменная

Я хочу извлечь точную строку «CAAJ» из файла «aaa.log» и его последующего содержимого.

cat aaa.log

CAAJ:dd20gf:acldx009:rel7

CAAJ:dd20gi:acldx009:rel7

CAAJ:dd20gp:acldx0059:rel7

CAAJ-TEST:de27ff:acldx003:rel7

CAAJ-TEST:de27ei:acldx003:rel7

CAAJ-TEST:de27ep:acldx003:rel7

Ожидаемый результат:

CAAJ:dd20gf:acldx009:rel7

CAAJ:dd20gi:acldx009:rel7

CAAJ:dd20gp:acldx0059:rel7

Я пробую следующий код. И получаю O/p.

grep -E '(^|)CAAJ(:|$)' aaa.log

CAAJ:dd20gf:acldx009:rel7

CAAJ:dd20gi:acldx009:rel7

CAAJ:dd20gp:acldx0059:rel7

Но когда я использую переменную вместо точной строки, я не могу получить O/p

var=CAAJ

grep -E '(^|)${var}(:|$)' aaa.log

OR 

grep -E '(^|)"${var}"(:|$)' aaa.log

Ничего из этого не сработало.

Я хочу использовать переменную вместо точной строки и получить желаемый o/p

решение1

попробуй это..

awk -F: '$1=="CAAJ" aaa.log

использование переменной в awk

awk -F: -vv="$var" '$1==v' aaa.log

команда grep

grep "^$var:" aaa.log

решение2

Во-первых, я понятия не имею, что тыдуматьскобки делают, но нет никаких причин использовать (^|). Это означает "начало строки, или ничего". Я удивлен, что это допустимый синтаксис.

Точно так же (:|$)кажется бессмысленным, когда все события, которые вас волнуют, происходят в одно и то же время.начинатьстроки.

Если вы поместите переменную в двойные кавычки, она будет расширяться. Если вы поместите ее в одинарные кавычки, то этого не произойдет.

Для всего этого вам не нужны расширенные регулярные выражения.


Вместо:

grep -E '(^|)'${var}'(:|$)'

Использовать:

grep ^CAAJ: aaa.log

Или:

var=CAAJ
grep "^${var}:" aaa.log

Или, поскольку разделитель полей, который вас интересует, — это :, просто используйте Awk:

awk -F: '$1 == "CAAJ"' aaa.log

Обратите внимание, что в этом последнем случае одинарные кавычки предназначены для оболочки, а двойные — для Awk. Все, что находится внутри одинарных кавычек, включая $1, будет передано в Awk точно так же, как есть.

решение3

Попробуй это:

var=CAAJ;grep "^$var:" aaa.log;

решение4

пытаться

grep -E "(^|)${var}(:|$)" aaa.log

Связанный контент