Экранирование регулярного выражения Linux sed

enter заставляет линейную дисциплину терминального устройства отправлять текущий входной буфер плюс \n(, переведенный из \r, отправленный эмулятором терминала ()с помощью настройки icrnlлинейной дисциплины ), на приложение, которое читает с терминального устройства. ^Dзаставляет линейную дисциплину терминального устройства отправлять текущий входной буфер без символа \nили ^D(символ съедается линейной дисциплиной, если только вы не отправили ^Vзаранее ).

Двойное нажатие ^Dприводит к выходу catиз-за предположения, что читать больше нечего.(read()возвращает 0 байт ).

1
23.10.2019, 08:29
1 ответ

Я написал это в комментарии, потому что не понимал, что это уже решение. ОП написал, что это работает, так что на этот раз в качестве ответа:

sed "s/\(name=\"port\" *value=\"\)[0-9]*/\1$NEWPORT/g" config.xml

Регулярное выражение, предложенное OP, использовало несколько нестандартных расширений -, поэтому оно не работало с sed, но они вам не нужны:

Я использую sed -i для замены значения порта в XML-файле,

Но я не знаю, как избежать регулярного выражения, мое регулярное выражение ниже.

  • вместо «обратного просмотра» (?<=somestring)вы можете использовать строку как есть, но в \(somestring\)пометить ее как подвыражение и повторно использовать в замене как \1, поэтому вместо того, чтобы говорить «это нужно быть там, но не быть замененным», просто заменить его собой
  • +— это сокращение для\{1,\}(одного или нескольких вхождений ), но вы также можете заменить a+на aa*. В этом случае, вероятно, лучше использовать простую *, потому что нулевые вхождения невозможны
  • \dчитается не лучше, чем [0-9],по-моему
  • \sможно заменить на [[:space:]]или [ <literal tab>]. Здесь работает простой пробел

Заключение :Почти всех расширений reg -ex можно легко избежать, что может привести к немного длинному шаблону или трудностям для чтения, но часто без каких-либо недостатков. Исключением является не -жадное соответствие. :В некоторых случаях вам нужна другая концепция без них.

1
28.04.2021, 23:28

Теги

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