Como sed
corresponde em greedy
, sempre existe a possibilidade de que o texto após o final do comentário seja correspondido em vez do marcador real de final de comentário anterior, por exemplo. como em uma string entre aspas que contém "* /".
Isso não pode ser tratado por sed
de maneira simples, mas você pode contornar isso. Aqui está um desses métodos: usando um marcador de espaço de caractere único para o delimitador final de dois caracteres. Usando o valor hexadecimal \x01
, pois os caracteres iniciais são seguros (isto é, não colidirão com o texto existente), pois não existem no texto normal.
sed "\|^/\*.*\*/|{ s|\*/|\x01|; s|.*\x01|| }" "$file"
Por outro lado, perl
pode manipular lazy
correspondência (e muito mais). Como já mencionado por Prince John Wesley nos comentários, aqui está o preguiçoso perl
equivalente.
perl -ple 's|/\*.*?\*/||g' "$file"