2011-09-06 67 views
0

我在Linux上的文本文件中有以下類型的文本模式。我只需要得到本文的最後部分。我怎麼弄到的?什麼是linux命令來獲得以下輸出?

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

我需要每一行即信息getKey,getSage等的只有最後一部分誰能告訴我如何與切或其他任何命令來獲取它。 在此先感謝。

+2

你有10個問題,所有這些都是不能接受的。照顧他們 –

回答

0

一個襯墊bash腳本:

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

這假定行中沒有空格。 – Teddy

1

管道將它導入cut[...] | cut -d: -f3

+0

它不工作它給行文本的第一部分,即在上述情況下,它給出tmk.mfg.pref.ZPreferes,com.sun.star.uno.SCompentCont ..你能告訴我另一種解決方案嗎? – Prajkata

+0

這將返回第一個字段,在這種情況下是tmk.mfg.pref.ZPreferes等,我認爲你的意思是'-f3' – beny23

+0

@ beny23:'哦,錯字... Prajkata:對不起,應該工作現在 – carlpett

2

我猜你想,因爲你是在堆棧溢出張貼到程序進行這個bash腳本。當然,你永遠不會少得到一個班輪。

我會用grep的

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

請注意,我用的是正則表達式是在Java/C/C標準的標識++改變,以滿足您的需要。

+0

標識符中沒有下劃線? –

+0

當然忘了:)現在修好了 – daramarak

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

你的意思是##,不是%% – Teddy

+0

很對,謝謝。 –

1

我建議要麼sed

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

awk

awk -F: '{ print $NF }' 

或者,如果要明確的第三冒號分隔的字段(而不是的最後場):

awk -F: '{ print $3 }' 

或者,如果你希望只使用bash內建的:

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