Como posso substituir o texto após uma palavra específica usando sed?

8

Eu tenho um arquivo chamado .ignore . Em necessidade de substituir o projdir . Por exemplo:

ignore \..*
ignore README
projdir Snake

Eu preciso substituir o Snake por, por exemplo, "PacMan". Eu li a man page, mas não tenho ideia do que fazer.

    
por Jakub Baski Gabčo 04.03.2013 / 23:46

4 respostas

11

Pesquise uma linha que começa com projdir e substitua a linha inteira por uma nova:

sed -i 's/^projdir .*$/projdir PacMan/' .ignore

^ e $ são marcadores de início / fim de linha, portanto, o padrão corresponderá à linha inteira; .* corresponde a qualquer coisa. O -i diz ao sed para gravar as alterações diretamente em .ignore , em vez de apenas exibi-las

    
por 05.03.2013 / 00:05
4

Uma abordagem é reescrever toda a linha, usando backreferences para as partes que você deseja manter:

sed -e 's/^\( *projdir  *\)[^ ]*\(.*\)*$/PacMan/'

Outra abordagem é reescrever essa parte da linha, mas apenas se outra parte corresponder:

sed -e '/^ *projdir / s/ [^# ]/ PacMan/'

Ambos os exemplos reescrevem a segunda palavra delimitada por espaços em branco nas linhas em que a primeira palavra é projdir .

    
por 06.03.2013 / 00:56
2

Embora este seja um post antigo e parece ser resolvido por você pela resposta aceita, a pergunta atual não foi respondida. Então, para ser completo e ajudar os outros:

Aqui, a resposta que realmente corresponde a "Snake" e não a linhas que começam com "projdir" ...

sed -r 's/(^.*)Snake/PacMan' .ignore

Isso substitui tudo desde o início da linha, incluindo "Snake" com tudo antes de "Snake" + "PacMan". \ 1 significa o que é correspondido dentro de (). Tudo depois de "Cobra" permanece intocado.

    
por 24.01.2018 / 12:30
-1
sed -i 's:^projdir.*$:projdir PacMan:g' .ignore

^ projdir é encontrar a linha que começa com projdir de string. O. * $ Significa a string depois de projetar na linha a mesma linha. A string projdir PacMan é a string com a qual estamos substituindo. g é para global - para substituir todas essas linhas começando com projdir. .ignore é o nome do arquivo

    
por 27.01.2017 / 11:07