Подстановка регулярных выражений
Я пытаюсь выполнить некоторые изменения в типичной командной строке 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