Как заменить это регулярное выражение пустым с помощью sed

Я неправильно понимаю ваш вопрос?

Прослушиватель netcat по умолчанию должен завершиться после получения ввода (в этом случае ваше эхо направляет его в netcat, который пересылает его слушателю).

Если вы хотите, чтобы прослушивающая служба Netcat продолжала слушать после получения входных данных:

nc -lk 12345
  • где 12345 - номер порта

Но самое главное, пожалуйста, проверьте справочные страницы для netcat .. они удивительно полезны для всех команд ...

man nc
1
25.09.2017, 11:23
3 ответа

Во-первых, sedне поддерживает нежадный квантификатор *?.

Во-вторых, вы должны изменить разделитель оператора подстановки:

sed 's~<oTimer[^>]*/>~~g'
1
27.01.2020, 23:33
  • Если <oTimer.*?/>является вашим регулярным выражением, обратите внимание, что <oTimer/>something else <anothertag?>также будет соответствовать. Это желательно? Может быть, вы ищете парсер html вместо этого?

  • Вы уверены в вопросительном знаке? В основных регулярных выражениях он не имеет специального значения, поэтому шаблон должен заканчиваться (необычным)?/>

  • Вам нужна одна обратная косая черта, чтобы избежать косой черты, но в этом случае легче читать, используя другой разделитель для вашей команды s(вы можете выбрать любой!):s_regex_replacement with /_

  • Если вы хотите заменить на пустую строку, вам все равно нужен третий разделитель (, второй и третий окружают строку замены, поэтому для пустой замены у вас есть два разделителя, между которыми ничего нет ).

  • В общем, я подозреваю, что вы ищете что-то вродеsed 's_<oTimer[^>]*/>__g'

2
27.01.2020, 23:33

Не используйте sedдля этого, так как он не понимает не -жадное сопоставление.Вы можете использовать perlвместо:

perl -pe 's|<oTimer.*?/>||g' file.in > file.out

Или, чтобы отредактировать файл на месте:

perl -i.bak -pe 's|<oTimer.*?/>||g' file.in
0
27.01.2020, 23:33

Теги

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