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
&
para se referir a parte do espaço padrão que combinou, e as fugas especiaisa
para se referir à correspondência correspondente subexpressões no regexp.
-
rexexp
acima é 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 exatatest
e uma terminação de linha ($
). - O
g
sinalizador é 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.