Как укоротить регулярное выражение? - PullRequest
0 голосов
/ 06 июля 2018

Во-первых, я относительно новичок в регулярных выражениях: я построил регулярное выражение, которое я использую с sed, которое отлично работает для меня, похоже, что: sed 's/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] [0-9][0-9][0-9][0-9][0-9][0-9].[0-9][0-9][0-9][0-9][0-9][0-9] | info | tst.33.12.carmen | !: //g' но я почти уверен, что все повторяющиеся вхождения персонажей могут быть упрощены. Как бы я это сделал?

Я хочу заменить: 20180630 180212.407107 | info | tst.33.12.carmen | !: из строки текста (отметка времени в начале может быть любым числом, строки за первым '|' являются постоянными)

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Если вас не интересует соответствие точного формата вашего префикса, но вы просто хотите принять некоторую комбинацию цифр, точек и пробелов, вы можете упростить первую часть до:

[ .0-9]*

Полное выражение sed выглядит следующим образом:

sed 's/^[ .0-9]*| info  | tst\.[0-9]*\.[0-9]*\.carmen | !:$//' file
0 голосов
/ 06 июля 2018

РЕДАКТИРОВАТЬ: Так как OP поставил образец ввода сейчас, поэтому добавление этого решения.

sed -E 's/^[0-9]{8} [0-9]{6}\.[0-9]{6} \| info  \| tst\.[0-9]{2}\.[0-9]{2}\.carmen \| \!:$//' Input_file

Проверка работоспособности кода:

Допустим, следующий файл является Input_file:

cat Input_file
20180630 180212.407107 | info  | tst.33.12.carmen | !:
fdfjwhfwifrwvf
vwkdnvkwkvwnvwv
20180630 180212.407107 | info  | tst.33.12.carmen | !:
dwbvwbvwvbb

Теперь после выполнения кода выше будет следующий вывод.

sed -E 's/^[0-9]{8} [0-9]{6}\.[0-9]{6} \| info  \| tst\.[0-9]{2}\.[0-9]{2}\.carmen \| \!:$//'  Input_file

fdfjwhfwifrwvf
vwkdnvkwkvwnvwv

dwbvwbvwvbb

С опцией sed -E вы можете использовать следующее, но справедливое предупреждение о том, что оно выбрано из вашего решения и никогда не тестировалось, поскольку в вашем посте не было произведено ни одного образца.

sed -E 's/^[0-9]{8} [0-9]{5}.[0-9]{5} | info  | tst.33.12.carmen | !: //g'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...