GREP: не признанный флаг: o

Предполагая, что ваше содержимое находится в файле x.txt , вы можете использовать выражение sed :

sed -e 's/#.*//' -e 's/=.*$/="&"/g' -e 's/=//2' x.txt

Первое выражение помещает все после знака = в кавычки. Второе выражение удаляет лишний знак = , а третье выражение удаляет все, что находится между # и ", поскольку они являются комментариями.

Далее RHS будет заключен в одинарные кавычки:

sed -e "s/#.*//" -e "s/=.*$/='&'/g" -e "s/=//2" x.txt
3
09.12.2018, 16:29
1 ответ

Обратите внимание, что ваше регулярное выражение не будет работать, даже если -oбудет распознано вашей реализацией grep. Вам также нужно -E, чтобы включить расширенные регулярные выражения. Предполагая, что у вас есть perl, что у вас, вероятно, есть, вы можете попробовать:

$ Data="Logs/2018-12-03/log.txt:3:2018-12-03 00:00:04,333 452621453 [blah blah blah"
$ echo "$Data" | perl -lne '/[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) (2[0-3]|[01][0-9]):[0-5][0-9]/ && print "$.:$&"'
1:2018-12-03 00:00

Но нужно ли вам так усложнять регулярное выражение? Разве этого недостаточно?

$ echo "$Data" | perl -lne '/\d{4}-\d{2}-\d{2} \d{2}:\d{2}/ && print "$.:$&"'
1:2018-12-03 00:00
5
27.01.2020, 21:15

Теги

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