Je veux ajouter une ligne spécifique, disons avatar
aux fichiers commençant par MakeFile
et avatar
doit être ajouté à la 15e ligne du fichier.
Voici comment ajouter du texte aux fichiers:
echo 'avatar' >> MakeFile.websvc
et voici comment ajouter du texte aux fichiers commençant par MakeFile je pense:
echo 'avatar' >> *MakeFile.
Mais je n'arrive pas à ajouter cette ligne à la 15e ligne du fichier.
Vous pouvez utiliser sed
pour résoudre ce problème:
sed "15i avatar" Makefile.txt
ou utilisez le -i
option pour enregistrer les modifications apportées au fichier.
sed -i "15i avatar" Makefile.txt
Pour modifier tous les fichiers commençant par Makefile
:
sed "15i avatar" Makefile*
Remarque: Dans ce qui précède 15
est votre ligne d'intérêt pour placer le texte.
Utilisation de sed:
sed -i '15i\avatar\' Makefile*
où l'option -i indique que la transformation se produit sur place (ce qui est utile par exemple lorsque vous souhaitez traiter plusieurs fichiers).
De plus, dans votre question, * MakeFile signifie 'tous les fichiers qui se terminent par MakeFile', tandis que 'tous les fichiers qui commencent par MakeFile' seraient désignés par MakeFile *.
Si vous devez passer la chaîne et les options de numéro de ligne au script, essayez ceci:
Perl -i -slpe 'print $s if $. == $n; $. = 0 if eof' -- -n=15 -s="avatar" Makefile*
-i
éditez le fichier d'entrée, ne faites pas de copie de sauvegarde$.
est le numéro de ligne
Ceci est basé sur ma solution à Insérer une ligne à un numéro de ligne spécifique avec sed ou awk , qui contient plusieurs autres méthodes de passage d'options à Perl, ainsi que des explications sur les options de ligne de commande.
Si vous voulez une version plus portable, vous pouvez utiliser ex
, qui fonctionnera sur n'importe quel * système Nix. (C'est spécifié par POSIX. ) Les commandes Sed données jusqu'à présent dépendent de GNU Sed.
Pour insérer une ligne ne contenant que "avatar" à la 15e ligne de chaque fichier du répertoire courant dont le nom commence par "Makefile", utilisez:
for f in MakeFile.*; do printf '%s\n' 15i 'avatar' . x | ex "$f"; done
Perl -pi -e 'if($.==14){s/\n/\navatar\n/g}if(eof){$.=0}' MakeFile*