Antes de tudo, recomendo evitar o uso de -i , pois ele substituirá os arquivos no local sem confirmação.
Esta é uma versão funcional do que você estava tentando realizar e produz a saída padrão (o terminal):
sed 's#^//[ \t]test$#test#g' file.conf
aaa
bbb
ccc
test
ddd
test
Opcionalmente canalize-o através de menos anexando | less para poder paginar através de grandes quantidades de saída.
O acima é muito específico para a sequência de test , então, para generalizar mais, você pode tentar isto:
sed 's#^//\s\(.*\)$##g' file.conf
Ele removerá a parte // e todos os espaços em branco até o texto real, qualquer que seja este texto.
Se você gostar do resultado, poderá adicionar o sinalizador -i novamente para substituir o arquivo.
Para saber mais sobre sua tentativa e explicar por que meu exemplo funciona:
sed -i 's#^//[ \t]test#test#g'
- Você está usando um backtick (') que é interpretado pelo seu shell em vez de Sed. Uma simples aspa simples (
') deveria ter sido usada aqui provavelmente. - Os hashes (
#) são o seu delimitador escolhido, uma boa alternativa à barra comum (/), já que sua correspondência é sobre esse mesmo caractere e isso evita a necessidade de escape. -
O padrão no comando
s/regexp/replacement/é padrão, como mencionado na manpage, entre muitos outros:man 1 sed:s/regexp/replacement/Tente corresponder o regexp ao padrão espaço. Se tiver êxito, substitua a parte correspondente à substituição. A substituição pode conter o caractere especial
¶ se referir a parte do espaço padrão que combinou, e as fugas especiaisapara se referir à correspondência correspondente subexpressões no regexp. -
rexexpacima é uma abreviação comumente usada para expressões regulares . - A expressão regular
^//[ \t]test$corresponde a linhas iniciando (^) com duas barras, seguido por um espaço ou um caractere de tabulação, seguido pela sequência exatateste uma terminação de linha ($). - O
gsinalizador é para fazer essa operação de maneira global, conforme explicado aqui . - Um arquivo de entrada está faltando e deve ser fornecido após o comando Sed.