Voici comment vous montrer la dernière ligne:
grep -lr -e '\$rev -'.$repUpRev.'\$' *.html | xargs sed -i 's/'\$rev -'.$repUpRev.'\$'/'\$rev -.*$'/g'
Il serait utile que vous avez montré des données d'entrée.
L'option -r
rend la récursive grep
. Cela signifie qu'il fonctionnera sur les fichiers dans le répertoire et ses sous-répertoires. Est-ce ce que vous avez l'intention?
Les points de vos codes grep
et sed
correspondent à n'importe quel caractère. Si vous voulez des points littéraux, vous devrez les échapper.
Le dernier signe dollar échappé des commandes grep
et sed
sera considéré comme un signe dollar littéral. Si vous voulez ancrer à la fin de la ligne, vous devez supprimer l'échappement. Le .*
fonctionne uniquement comme une chaîne littérale sur le côté droit d'une commande sed
s
. Si vous voulez inclure ce qui a été apparié sur le côté gauche, vous devez utiliser des groupes de capture. Le modificateur g
de la commande s
n'est nécessaire que si le motif apparaît plusieurs fois sur une ligne.
L'utilisation de guillemets, de guillemets, de guillemets, de guillemets est difficile à lire. Utilisez des guillemets doubles pour autoriser l'expansion des variables.
Essayez votre commande grep
par elle-même sans les xargs
et pour voir si elle produit une liste de fichiers.
Cela peut être plus proche de ce que vous voulez:
grep -lr -e "\$rev -.$repUpRev.$" *.html | xargs sed -i "s/\$rev -.$repUpRev.$/\$rev -REPLACEMENT_TEXT/g"
mais vous aurez toujours besoin de déterminer si le modificateur g
, les points, les signes dollar finaux, etc., sont ce que vous avez l'intention.
Quelle coque utilisez-vous? Quand vous dites seulement "ne pas travailler", ce n'est pas très utile. S'il vous plaît soyez précis concernant les messages d'erreur ou comment le comportement diffère de ce que vous attendez. –