GNU/Linux >> Tutoriels Linux >  >> Linux

Utilisation de Sed pour rechercher et remplacer une ligne entre des plages de motifs

Voici une question de notre lecteur régulier M. Rajan. Il veut utiliser Sed pour rechercher et remplacer une ligne entre des plages de motifs. Eh bien, voici une question de sa part.

J'ai écrit un script shell pour automatiser quelques tâches sur VPS. Par exemple, je voulais modifier httpd.conf et remplacez "AllowOverride None" to "AllowOverride All" qui se trouve dans un <Directory "/var/www/html"> particulier . L'idée est de remplacer uniquement la ligne dans ce bloc particulier sans affecter les autres blocs (en fait, il y en a beaucoup, mais je suis préoccupé par le bloc qui contient "/var/www/html" ). La raison pour laquelle je voulais faire cela est que j'ai eu des difficultés à configurer Apache pour autoriser les remplacements de .htaccess fichiers.

Par exemple :dans le code ci-dessous de httpd.conf fichier, je dois rechercher le modèle <Directory "/var/www/html"> et remplacez AllowOverride None avec Autoriser tout remplacer situé dans cette structure de répertoires sans affecter les autres structures de répertoires.

<Directory "/var/www/html">
 AllowOverride None
 </Directory>

S'il vous plaît, aidez-moi.

Utilisation de Sed pour rechercher et remplacer une ligne entre des plages de motifs

Cela semble être une tâche pour sed , comme sed prend en charge les plages de modèles sous cette forme :

sed '/startpattern/,/endpattern/ <sed-commands>' file

Donc, selon les exigences de Rajan, nous devons rechercher le modèle de départ <Directory "/var/www/html"> , modèle de fin </Directory> et recherchez "AllowOverride None" and replace it with "AllowOverride all" . Pour ce faire, le sed La commande doit être utilisée comme indiqué ci-dessous.

#sed -i '/<Directory "\/var\/www\/html">/,/<\/Directory>/ s/AllowOverride None/AllowOverride all/' httpd.conf

Ici -i L'option consiste à modifier les fichiers sur place. Si vous n'utilisez pas l'option -i , alors la sortie modifiée sera imprimée sur le stdout et le fichier ne serait pas modifié !


Linux
  1. Utilisation de sed pour rechercher et remplacer des fichiers texte sous Linux

  2. Comment obtenir un nombre de fichiers dans un répertoire à l'aide de la ligne de commande ?

  3. Trouver le numéro de ligne qui contient le modèle à l'aide du délimiteur Regex personnalisé ?

  4. Sed peut-il remplacer les caractères de nouvelle ligne ?

  5. Remplacer la plage de lignes par la plage de lignes (sed ou autres) ?

Comment effectuer une recherche de modèle dans les fichiers à l'aide de Grep

Comment supprimer des lignes d'un fichier à l'aide de la commande Sed

Comment remplacer sed comme texte par python?

Utiliser grep et sed pour rechercher et remplacer une chaîne

Rechercher et remplacer par sed dans le répertoire et les sous-répertoires

Le concept de 'Hold space' et 'Pattern space' dans sed