Ubuntu - Конфигурация VSFTPD для FTP дает сбой при перезапуске

В стандартном базовом регулярном выражении (?\(\d(3}\)[-.]?означает:

a literal left parenthesis
a literal question mark
(start of a group)
a literal character 'd'
a literal left parenthesis 
the number '3'
a literal closing brace
(end of group)
a dash or a dot
a question mark

т. е. это напечатаетx:

echo '(?d(3}-?' |sed 's/(?\(\d(3}\)[-.]?/x/'

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

Также обратите внимание, что \dявляется частью регулярных выражений Perl, а не стандартных, и хотя GNU sed поддерживает некоторые \Xescape-символы, они не являются стандартными (и я не думаю, что он поддерживает\d). То же самое для \?, GNU sed поддерживает его в BRE для обозначения того, что ?означает в ERE, но это не стандарт.

Имея это в виду:

$ echo '(123)-456-7890' | sed -E 's/\(?([0-9]{3})\)?[-.]?([0-9]{3})[-.]?([0-9]{4})/\1\2\3/'
1234567890

Хотя с таким же успехом можно просто переборщить и удалить все, кроме цифр:

$ echo '(123)-456-7890' | sed -e 's/[^0-9]//g'
1234567890

(, который, конечно, также будет принимать такие вещи, как (123)-4.5-6-7a8b9c0...)

См. также:

0
26.04.2020, 17:58
0 ответов

Теги

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