Я нашел ответ
sed -E 's/[-1] / 9/' file1 > file2
могу выполнить работу
Слово emmailloter
содержит гораздо больше, чем i
между битами, соответствующими [a-f]
и [^ta]$
. Шаблон .
всегда соответствует только одному символу, поэтому, если вы хотите сопоставить несколько символов между emma
и r
в конце, вам придется разрешить несколько символов:
emm*[a-f]..*[^ta]$
Еслиgrep -E
(включить расширенные регулярные выражения ), ..*
можно записать как .+
, то есть «соответствовать хотя бы одному символу». Выражение ..*
читается как «соответствие символу, а затем, возможно, большему количеству символов». Точно так же emm*
можно заменить на em+
, т.е. "e
с последующим хотя бы одним m
" при использовании grep -E
.
Это будет соответствовать строке
blop-emmmmmmmmma-blarg-b
^^^^^^^^^^^^^^^^^^^
1111111111233333334
1: emm*
2: [a-f]
3:..*
4: [^ta]$
(совпадающая часть, обозначенная символами ^
выше ), например, а такжеemmailloter
:
emmailloter
^^^^^^^^^^^
11123333334
Тестирование:
$ grep -E 'emm*[a-f].+[^ta]$' MySQLServ
remembré
emmené
emmailloter
flemmard
Обратите внимание, что для слова remembré
соответствие будет
remembré
^^^^^^^
1123334
не
remembré
^^^^^
11234
Один из способов визуализации совпадений с использованиемsed
:
$ sed -n -E 's/(emm*)([a-f])(.+)([^ta]$)/(\1)(\2)(\3)(\4)/p' MySQLServ
r(em)(e)(mbr)(é)
(emm)(e)(n)(é)
(emm)(a)(illote)(r)
fl(emm)(a)(r)(d)
Будут напечатаны только совпадающие строки, где каждая совпавшая часть регулярного выражения заключена в круглые скобки. Это также предполагает, что вы используете реализацию sed
, которую можно использовать для сопоставления французских символов, и что переменные среды локали правильно настроены для этого.
Сравните это с исходным выражением:
$ sed -n -E 's/(emm*)([a-f])(.)([^ta]$)/(\1)(\2)(\3)(\4)/p' MySQLServ
rem(em)(b)(r)(é)
(emm)(e)(n)(é)
fl(emm)(a)(r)(d)