Удалить все строки, соответствующие заданному началу и 2 возможным концам

#regex #sed

#регулярное выражение #sed

Вопрос:

Я хочу поместить в файл все строки, соответствующие следующим требованиям :

  • Строка начинается с ‘*’ (пробел, за которым следует звездочка)
  • Строка заканчивается либо ‘.cpp’, либо ‘.hpp’

Меня не волнует содержимое между ними, так что, например, это должно появиться

  • * ns1/file.cpp
  • * file2.hpp

Я попробовал следующую команду sed -e '/^ **(.[hc]pp)$/d' file

Но это не соответствует строкам. Любая помощь будет оценена.

Ответ №1:

Вам нужно использовать .* между ними, чтобы соответствовать произвольному тексту:

 sed '/^ *.*.[hc]pp$/d' file
  

Ответ №2:

 egrep -v '^ [*].*[.][ch]pp$' YourFilePattern
  

в качестве альтернативы sed