2010-10-11 9 views
0

j'ai quelques cordes avec ce modèle dans certains fichiers:Comment utiliser des expressions régulières dans la commande sed

  • domain.com/page-10
  • domain.com/page-15 ....

et je veux les remplacer par quelque chose comme

  • domain.com/apple-10.html
  • domain.com/apple-15.html

j'ai trouvé que je peux utiliser la commande sed pour les remplacer à un moment, mais parce que, après les chiffres que j'ajouter quelque chose doivent deviner que je dois utiliser l'expression régulière fais le. mais je ne sais pas comment.

Répondre

6
sed -i.bak -r 's/page-([0-9]+)/apple-\1.html/' file 

sed 's/page-\([0-9][0-9]*\)/apple-\1.html/' file > t && mv t file 

En plus sed, vous pouvez également utiliser gawk de gensub()

awk '{b=gensub(/page-([0-9]+)/,"apple-\\1.html","g",$0) ;print b }' file 
+0

Vous n'avez pas vu l'intégralité de ce que l'OP veut. – Amber

+0

Utilise une extension GNU Sed - peut être écrite en sed standard en remplaçant le '+' par '[0-9] *'. –

+0

@jonathan, tu es sûr? '*' est zéro ou plus. '+ 'est un ou plusieurs. '[0-9] [0-9] *' devrait être plus approprié. – ghostdog74

5
sed -i 's/page-\([0-9]*\)/apple-\1.html/' <filename> 

Le ([0-9]*)capture un groupe de chiffres; le \1 dans les références de chaîne de remplacement qui capturent et l'ajoute en tant que partie de la chaîne de remplacement.

Vous pouvez utiliser quelque chose comme -i.backup si vous devez conserver une copie du fichier sans les remplacements, ou simplement omettre le -i et utiliser plutôt la méthode de redirection d'E/S à la place.

+0

Vous n'avez pas spécifié comment utiliser \ d + – ghostdog74

+0

merci mais j'exécuter votre commande donnée et a obtenu cette erreur: référence non valide \ 1 sur RHS –

+1

qui est de l'ordre de 's parce que vous devrait s'échapper des accolades ... voir ma 2ème réponse – ghostdog74

0

Encore la manière de résoudre le problème:

sed -i.bak 's/\(^.*\)\(page-\)\(.*\)/\1apple-\3.html/' Files 

Voici les modèles de recherche sont stockées et récupérées à l'aide de références (\1\2, \3).

-1

Cela fonctionne

sed 's/$/\.html/g' file.txt 
+0

sed 's/$/\. Html/g' fichier.txt –

Questions connexes