2011-09-06 2 views
0

J'ai le type de texte suivant dans un fichier texte sous Linux. Je n'ai besoin que de la dernière partie de ce texte. Comment puis-je l'obtenir?Quelle est la commande linux pour obtenir la sortie suivante?

tmk.mfg.pref.ZPreferes::getKey 
com.sun.star.uno.SCompentCont::getSage 
com.sun.star.lang.XMultiComponentFactory::createInstanceWithContext 

J'ai besoin que dernière partie de chaque ligne à savoir getKey, getSage, etc. Quelqu'un peut-il me dire comment l'obtenir avec une coupe ou toute autre commande. Merci d'avance.

+2

Vous avez 10 questions, tous ne sont pas acceptés. Prenez soin d'eux –

Répondre

0

Un script bash liner:

for line in $(cat test); do echo ${line//*::}; done 
+0

Cela suppose aucun espace blanc dans les lignes. – Teddy

1

pipe dans cut: [...] | cut -d: -f3

+0

son ne fonctionne pas, il donne la première partie du texte de la ligne, c'est-à-dire dans le cas ci-dessus, il donne tmk.mfg.pref.ZPreferes, com.sun.star.uno.SCompentCont .. pouvez-vous me dire une autre solution? – Prajkata

+0

Cela reviendrait le premier champ, qui dans ce cas est tmk.mfg.pref.ZPreferes etc, je pense que vous vouliez dire «-f3» – beny23

+0

@ beny23: D'oh, typo ... Prajkata: Désolé à ce sujet, devrait fonctionner maintenant – carlpett

2

je suppose que vous voulez programmer un script bash pour cela car vous envoyez des messages sur un débordement de pile. Bien sûr, vous n'en aurez jamais moins un seul paquebot.

je l'aurais utilisé grep

grep -o -e "[a-zA-Z][a-zA-Z0-9_]*$" TEXTFILE.TXT 

Notez que le regexp J'utilise est un identifiant standard java/c/C++ modifier en fonction de vos besoins.

+0

Aucun caractère de soulignement dans un identifiant? –

+0

bien sûr, j'ai oublié :) Fixé maintenant – daramarak

0
while read line; do 
    echo "${line##*:}" # removes everything up to and including the last colon 
done < input.file 
+0

Vous voulez dire ##, pas %% – Teddy

+0

Tout à fait raison, merci. –

1

Je suggère soit sed:

sed --expression='s/.*://' 

ou awk:

awk -F: '{ print $NF }' 

Ou, si vous voulez explicitement le troisième champ séparé par deux points (au lieu du dernier champ):

awk -F: '{ print $3 }' 

Ou, si vous voulez utiliser seulement bash builtins:

while read line; do echo "${line##*:}"; done 
Questions connexes