web-dev-qa-db-fra.com

Ajout d'une ligne de texte à plusieurs fichiers

Donc, j'ai un tas de fichiers dans un répertoire et j'ai besoin d'insérer une ligne de texte dans chacun d'eux. Ils ont essentiellement le format suivant:

[.____] 
<VirtualHost *:80>
        ServerAdmin gabe@localhost
        DocumentRoot /var/www/test1
        ServerName test1.local
        ServerAlias test1
        <Directory "/var/www/test1">
                Options All
                AllowOverride All
        </Directory>
</VirtualHost>

Et je voudrais insérer une ligne avant la fermeture

</ Virtualhost>
10
gabe.

Quelque chose comme ça:

sed 's/<\/VirtualHost>/yourlinehere\n<\/VirtualHost>/'

travaux. Si vous souhaitez répéter cette commande sur beaucoup de fichier, vous pouvez faire quelque chose comme:

for i in *; do sed -i 's/<\/VirtualHost>/yourlinehere\n<\/VirtualHost>/' "$i"; done

Probablement mieux (mais non testé) grâce à @chrisdown:

find . -type f -print0 | while IFS= read -r -d '' filename;\
do sed -i 's/<\/VirtualHost>/yourlinehere\n<\/VirtualHost>/' $filename;\ 
done
10
lcipriani

Si cela ne vous dérange pas Perl essayer:

Perl -pi'*.old' -e 's(</VirtualHost>(Your stuff here\n</VirtualHost>)' myfile

Le -i Le commutateur enregistre votre ancien fichier avec un .old extension et impression à l'autre.

2
gvkv

Vous pouvez utiliser le code de ligne unique suivant pour insérer une ligne unique ou plusieurs lignes dans un emplacement donné dans un fichier, dans votre case avant 'virtualhost'. Le code recherche essentiellement le nom de fichier (cela pourrait être *. *, Si vous souhaitez insérer les textes dans tous les fichiers) dans le répertoire donné et ses sous-répertoires. Dans les fichiers trouvés, il recherche le modèle "Virtualhost". Après avoir trouvé le motif, il le remplace par Firstline\Nsecondline\Notherlines\n\virtualhost. Notez que "Virtualhost" fait partie du texte de remplacement, sinon nous la perdons.

find directory/ -name filename -print | xargs sed -i 's|VirtualHost|firstline\nsecondline\notherlines\nVirtualHost|g'
0
Oufie