Je dois remplacer une chaîne de caractères dans de nombreux fichiers d'un dossier, avec seulement ssh
l'accès au serveur. Comment puis-je m'y prendre ?
Réponses
Trop de publicités?cd /path/to/your/folder
sed -i 's/foo/bar/g' *
Les occurrences de "foo" seront remplacées par "bar".
Sur les systèmes BSD comme macOS, vous devez fournir une extension de sauvegarde comme -i '.bak'
ou sinon "risque de corruption ou de contenu partiel" selon la page de manuel.
cd /path/to/your/folder
sed -i '.bak' 's/foo/bar/g' *
La réponse de @kev est bonne, mais n'affecte que les fichiers du répertoire immédiat.l'exemple ci-dessous utilise grep pour trouver les fichiers de manière récursive. Cela fonctionne pour moi à chaque fois.
grep -rli 'old-word' * | xargs -i@ sed -i 's/old-word/new-word/g' @
Répartition des commandes
grep -r : -récursif , lire récursivement tous les fichiers sous chaque répertoire.
grep -l : --print-with-matches affiche le nom de chaque fichier qui a une correspondance, au lieu d'afficher les lignes correspondantes.
grep -i : --ignore-case .
xargs pour transformer le STDIN en arguments, suivez cette procédure respuesta .
xargs -i@ ~command contient @~ : un caractère de remplacement pour l'argument à utiliser dans une position spécifique dans le fichier ~Commande. le signe @ est un caractère de remplacement qui peut être remplacé par n'importe quelle chaîne de caractères.
sed -i : modifier les fichiers en place, sans sauvegardes.
sed s/regexp/replacement/ : correspondance de chaînes de substitution regexp con remplacement .
sed s/regexp/replacement/ g : mondial Dans ce cas, la substitution s'effectue pour chaque correspondance et non pas seulement pour la première.
- Réponses précédentes
- Plus de réponses