Em um arquivo contendo linhas como esta:
# lorem ipsum blah variable
Gostaria de remover o #
caractere (comentário) na mesma linha que contém uma sequência específica, no lugar. Isso é sed
bom para isso?
Estou lutando para obter esse trabalho condicional. Eu tenho uma maneira "desajeitada" de fazer isso; Posso encontrar o número da linha correspondente com awk
ou sed
e depois usá-lo em um sed
comando separado , mas acredito que isso pode ser feito de uma maneira muito melhor.
's/#//g'
removerá todos os#
caracteres da linha. Se não é isso que você deseja, remova og
(que significa "global"). (2) Para editar um arquivo no local (conforme solicitado na pergunta), usesed -i
.sed -i '/ipsum/s/#[[:space:]]*//'
, para se livrar de quaisquer espaços e guias imediatamente após o#
. (4) Você também pode verificar se esse#
é o primeiro caractere que não está em branco na linha. O comando atual excluiria o#
da linhaprompt "Enter # of ipsums:"
.sed -i '/ipsum/s/^#[[:space:]]*//'
?! (^
Significa o início da linha,$
para fim de linha) - pelo menos no GNU sed ...^
, mas isso seria errado. Costumo comentar o código recuado colocando o#
imediatamente antes do código, para que o#
recuo seja feito. Duvido que eu seja a única pessoa que faz isso.^
&#
, então algo mais parecido com isto:/ipsum/{/^[[:space:]]*#/s/#[[:space:]]*//}
. Embora mesmo assim, dependendo de onde#
esteja, ele ainda possa causar problemas (por exemplo, em idiomas que usam recuo / separação de espaço em branco).então:
dá:
Funciona da seguinte maneira:
O
s
dizsed
que ele deve substituir o que a expressão regular encontra.O padrão é
# \(.*blue.*\)
dividido em: Encontre um hash seguido por um espaço. O colchete (\(
) inicia o agrupamento..*blue.*
é a palavrablue
com qualquer coisa antes e depois. O próximo colchete (\)
) fecha o agrupamento.A substituição é
\1
uma referência retroativa ao conteúdo do primeiro suporte de agrupamento.fonte
Você pode usar o Vim no modo Ex:
s
substitutox
salvar e fecharfonte