J'ai un fichier nommé .ignore
. Besoin de remplacer le projdir
. Par exemple:
ignore \..*
ignore README
projdir Snake
Je dois remplacer Snake par, par exemple, "PacMan". J'ai lu la page de manuel, mais je ne sais pas quoi faire.
J'ai un fichier nommé .ignore
. Besoin de remplacer le projdir
. Par exemple:
ignore \..*
ignore README
projdir Snake
Je dois remplacer Snake par, par exemple, "PacMan". J'ai lu la page de manuel, mais je ne sais pas quoi faire.
Réponses:
Recherchez une ligne commençant par projdir
et remplacez la ligne entière par une nouvelle:
sed -i 's/^projdir .*$/projdir PacMan/' .ignore
^
et $
sont des marqueurs de début / fin de ligne, donc le motif correspondra à toute la ligne; .*
correspond à tout. Le -i
dit sed
d'écrire les changements directement dans .ignore
, au lieu de simplement les sortir
Une approche consiste à réécrire la ligne entière, en utilisant des références arrières pour les parties que vous souhaitez conserver:
sed -e 's/^\( *projdir *\)[^ ]*\(.*\)*$/\1PacMan\2/'
Une autre approche consiste à réécrire cette partie de la ligne, mais uniquement si une autre partie correspond:
sed -e '/^ *projdir / s/ [^# ]/ PacMan/'
Les deux exemples réécrivent le deuxième mot délimité par des espaces sur les lignes où se trouve le premier mot projdir
.
Bien qu'il s'agisse d'un ancien poste et qu'il semble avoir été résolu pour vous par la réponse acceptée, la vraie question n'a pas été répondue. Donc pour être complet et pour aider les autres:
Voici la réponse qui correspond en fait à "Snake" et non aux lignes commençant par "projdir" ...
sed -r 's/(^.*)Snake/\1PacMan' .ignore
Cela remplace tout depuis le début de la ligne, y compris "Snake" avec tout avant "Snake" + "PacMan". \ 1 représente ce qui correspond à l'intérieur (). Tout après "Snake" reste intact.
sed -i 's:^projdir.*$:projdir PacMan:g' .ignore
^ projdir est de trouver la ligne qui commence par la chaîne projdir. Le. * $ Représente la chaîne après projdir dans la ligne la même ligne. La chaîne projdir PacMan est la chaîne avec laquelle nous remplaçons. g est pour global - pour remplacer toutes ces lignes commençant par projdir. .ignore est le nom du fichier