Подстановка регулярных выражений

Я пытаюсь выполнить некоторые изменения в типичной командной строке g++. Я пытаюсь построить регулярное выражение в поисках -o object_filename.o строит. Для того, чтобы проверить мой шаблон сопоставления, я запускаю его в sed с пустой строкой в ​​качестве замены. Но это не работает, как ожидалось, так как ничего не удаляет...

$echo "-o toto.o" | sed 's/-o [^ ]+//'
-o toto.o

2 ответа

Решение

Вам не хватает -E флаг; без этого, + не рассматривается как метасимвол регулярного выражения:

$echo "-o toto.o" | sed -E 's/-o [^ ]+//'

Выше выдает пустой вывод, как и ожидалось.

Если я правильно понимаю, то sed -E 's/-o.+?\.o//' следует делать то, что вы хотите:

$ cat file

g++ .. -o object_filename.o some more options
g++ .. -o object1.o some more options
g++ .. -o foo_bar.o some more options

$ sed -E 's/-o.+?\.o//' file

g++ ..  some more options
g++ ..  some more options
g++ ..  some more options
Другие вопросы по тегам