Вы можете печатать строки на основе флага, который устанавливается, только если первое поле является полем даты. см. следующий код с флагом p
, чтобы указать awk печатать (, когда p==1
), или пропускать (, когдаp==0
)строка
awk -v tstart="$start" -v tend="$end" '
/^[0-9]{4}-[0-9]{2}-[0-9]{2}/ {
t = $1 " " $2
p = t >= tstart && t <= tend ? 1 : 0
}p' webservice_logs.log
Поскольку в начале строк ERROR нет метки времени, в таких строках не происходит изменения флага.
Правка В одной строке:
awk -v tstart="$start" -v tend="$end" '/^[0-9]{4}-[0-9]{2}-[0-9]{2}/{t = $1 " " substr($2,1,5); p = t >= tstart && t <= tend ? 1 : 0}p' webservice_logs.log
Просто ударить
line='name,orange,price,{*},color,{80 30 40}'
s='{*}'
echo "${line//"$s"/*}"
name,orange,price,*,color,{80 30 40}
Я не мог понять, как сделать экранирование, чтобы переменная s
была не нужна.
Обратите внимание, что двойные кавычки обязательны, иначе вы получите:
$ echo "${line//$s/*}"
name,orange,price,*
Использование sed
команды s
(в качестве замены )– включить фигурные скобки в regexp
, но не вreplacement
:
sed 's/{\*}/*/g'
Команда
sed "/{\*}/s/{\*}/*/g" filename
выход
name,apple,price,{50 70 80 80},color,*
name,orange,price,*,color,{80 30 40}
Метод 2
awk '$0 ~ "{*}" {gsub (/{\*}/,"*",$0);print }' filename
выход
name,apple,price,{50 70 80 80},color,*
name,orange,price,*,color,{80 30 40}