Bash :удалить фигурные скобки при условии

Вы можете печатать строки на основе флага, который устанавливается, только если первое поле является полем даты. см. следующий код с флагом 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
0
10.03.2020, 06:54
3 ответа

Просто ударить

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,*
1
28.04.2021, 23:20

Использование sedкоманды s(в качестве замены )– включить фигурные скобки в regexp, но не вreplacement:

sed 's/{\*}/*/g'
3
28.04.2021, 23:20

Команда

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}
0
28.04.2021, 23:20

Теги

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