Я хочу извлечь точную строку «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