Tengo un archivo llamado .ignore. En necesidad de reemplazar el projdir. Por ejemplo:
ignore \..*
ignore README
projdir Snake
Necesito reemplazar Snake con, por ejemplo, "PacMan". Leí la página del manual, pero no tengo idea de qué hacer.
Tengo un archivo llamado .ignore. En necesidad de reemplazar el projdir. Por ejemplo:
ignore \..*
ignore README
projdir Snake
Necesito reemplazar Snake con, por ejemplo, "PacMan". Leí la página del manual, pero no tengo idea de qué hacer.
Respuestas:
Busque una línea que comience projdiry reemplace toda la línea por una nueva:
sed -i 's/^projdir .*$/projdir PacMan/' .ignore
^y $son marcadores de inicio / fin de línea, por lo que el patrón coincidirá con toda la línea; .*coincide con cualquier cosa. El -ile dice seda escribir los cambios directamente .ignore, en lugar de simplemente enviarlos
Un enfoque es reescribir toda la línea, utilizando referencias posteriores para las partes que desea conservar:
sed -e 's/^\( *projdir *\)[^ ]*\(.*\)*$/\1PacMan\2/'
Otro enfoque es reescribir esa parte de la línea, pero solo si alguna otra parte coincide:
sed -e '/^ *projdir / s/ [^# ]/ PacMan/'
Ambos ejemplos reescriben la segunda palabra delimitada por espacios en blanco en las líneas donde está la primera palabra projdir.
Aunque esta es una publicación antigua y parece que la respuesta aceptada la resuelve, la pregunta real no ha sido respondida. Entonces, para completar y ayudar a otros:
Aquí la respuesta que realmente coincide con "Snake" y no con las líneas que comienzan con "projdir" ...
sed -r 's/(^.*)Snake/\1PacMan' .ignore
Esto reemplaza todo desde el comienzo de la línea, incluyendo "Snake" con todo antes de "Snake" + "PacMan". \ 1 representa lo que coincide dentro (). Todo lo que sigue a "Serpiente" permanece intacto.
sed -i 's:^projdir.*$:projdir PacMan:g' .ignore
^ projdir es encontrar la línea que comienza con string projdir. El. * $ Allí representa la cadena después de projdir en la línea de la misma línea. El string projdir PacMan es el string con el que estamos reemplazando. g es para global: para reemplazar todas esas líneas que comienzan con projdir. .ignore es el nombre del archivo