2010-05-21 6 views
2

Je suis actuellement dans le besoin d'un moyen de supprimer par programmation du texte de Makefiles que j'ai affaire. Maintenant le problème est que (pour une raison quelconque) les makefiles sont générés avec des commandes de lien de -l<full_path_to_library>/<library_name> quand ils devraient être générés avec -l<library_name>. Donc ce dont j'ai besoin est un script pour trouver toutes les occurrences de -l/ et ensuite supprimer jusqu'à et y compris le suivant /.script awk/sed pour supprimer du texte

Exemple de ce que je fais face à

-l/home/user/path/to/boost/lib/boost_filesystem

je besoin d'être

-lboost_filesystem

Comme on pouvait l'imaginer, il s'agit d'un espace d'arrêt mesure jusqu'à ce que je fixe le vrai problème (du côté de la génération) mais en attendant ce serait une grande aide pour moi si cela peut fonctionner et je ne suis pas trop bon avec mon awk et sed.

Merci pour toute aide.

+0

Y at-il une raison particulière que vous n'êtes pas aborder le problème de * pourquoi * le système de construction fait foiré makefiles en premier lieu? – dmckee

+0

Comme indiqué dans la question, il s'agit d'une solution temporaire. Je suis actuellement en train d'exécuter un correctif non officiel du système de construction qui a certaines fonctionnalités dont j'ai besoin, malheureusement, il génère des fichiers makefiles avec le problème indiqué. J'ai certainement l'intention de résoudre le problème (et bientôt) en intégrant correctement les nouvelles fonctionnalités mais en attendant je voulais être capable de compiler mon application, après des jours de tout mettre en place et maintenant je peux;) – radman

Répondre

4
sed -i 's|-l[^ ]*/\([^/ ]*\)|-l\1|g' Makefile 
+0

Je voudrais ajouter des espaces en face de '-l' pour éviter de correspondre' -lrelative-librarypath/lib' – msw

+0

fonctionne comme un charme pour mes fins, merci :) – radman

1

Ici, vous allez

echo "-l/home/user/path/to/boost/lib/boost_filesystem" | awk -F"/" '{ print $1 $NF } ' 
+0

Qui gère votre cas de test unique, mais pas le problème général de plusieurs instances sur les lignes contenant autre texte awk est la plus heureuse des actions en ligne, vous pouvez ajouter un pattern à la scriptlette mais sed est le meilleur choix ici. – msw

Questions connexes